VS Code IntelliSense issues

question
vscode

#1

VS Code extension for Julia provides some nice static checks, e.g. it hints “possibly undeclared variable”, and also allows going to definition. But it seems to work only within one file. Even if I have include, definitions from the included file are not visible. So I got hundreds of “possibly undeclared” variables, which is very annoying.

Is there any workaround for this? Can I make VS Code search definitions in included files, or even better in the whole workspace? If follow the standard package structure, you end up with multiple files that are to be included in one “main” file, and, therefore, these files are not valid on their own.

P.S. There is a “go to symbol in workspace” function, but it doesn’t solve the problem with undeclared variables.


#2

include's usually work fine for me. It is important that the includes are “simple” in the sense that they are just "include("folder/file.jl"). More “dynamic” includes like include(joinpath("folder", "file.jl")) will, right now, not work.


#3

Ah, I see: includes are processed fine if they contain plain code, without modules. Definitions inside modules, however, cannot be found.


#4

I think it would be nice to have something like project file for Julia. Or maybe even consider some julia file as a project file. As packages usually have one main file, which has a bunch of includes, it could be used to deduce the order in which files’ contents should be analyzed.


#5

If you define a new module inside a file and include that file, you need to explicitly import the variables in that module to get access to them. So perhaps this is not a vscode error?

That is in fact how it (should) work. For a package, Package.jl, the src/Package.jl file is considered the “top file” and from there, includes are processed.


#6

I have exports in the included module and using in the file that includes. Here is an example.

file1.jl

module GraphAux

export Vertex

struct Vertex{T}
    data :: T
end

end

file2.jl

include("file1.jl")

using GraphAux

struct Graph{T}
    vertices :: Vector{Vertex{T}}
    
end

VS Code cannot find the definition of Vertex in file2.jl.

Do I need to specify some workspace settings maybe?


#7

Interesting, if I do import GraphAux: Vertex it can find it. This seems like a bug in LanguageServer.jl.


#8

Hi all,
There are issues w/ scoping and variables exported from user defined modules, they’ve not worked for a while but will be fixed when StaticLint gets integrated (next vscode release)


#9

Ah, sounds promising, thank you!

And as for the package structure: when I edit a source file file3.jl that is included into a “top file” of a package but does not include anything itself, would the VS Code look for definitions from files file1.jl and file2.jl included into the top file before file3.jl?