Skip to content

Commit 7fe1d5d

Browse files
authored
Format files using DocumentFormat
1 parent 74ec406 commit 7fe1d5d

15 files changed

+256
-258
lines changed

docs/make.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ makedocs(;
77
repo="https://github.com/julia-vscode/StaticLint.jl/blob/{commit}{path}#L{line}",
88
sitename="StaticLint.jl",
99
format=Documenter.HTML(;
10-
prettyurls=prettyurls = get(ENV, "CI", nothing) == "true",
10+
prettyurls=prettyurls = get(ENV, "CI", nothing) == "true"
1111
# canonical="https://www.julia-vscode.org/StaticLint.jl",
1212
# assets=String[],
1313
),
1414
pages=[
1515
"Home" => "index.md",
1616
"Syntax Reference" => "syntax.md",
17-
],
17+
]
1818
)
1919

2020
deploydocs(;
21-
repo="github.com/julia-vscode/StaticLint.jl",
21+
repo="github.com/julia-vscode/StaticLint.jl"
2222
)

src/StaticLint.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ Meta() = Meta(nothing, nothing, nothing, nothing)
2929

3030
function Base.show(io::IO, m::Meta)
3131
m.binding !== nothing && show(io, m.binding)
32-
m.ref !== nothing && printstyled(io, " * ", color = :red)
33-
m.scope !== nothing && printstyled(io, " new scope", color = :green)
34-
m.error !== nothing && printstyled(io, " lint ", color = :red)
32+
m.ref !== nothing && printstyled(io, " * ", color=:red)
33+
m.scope !== nothing && printstyled(io, " new scope", color=:green)
34+
m.error !== nothing && printstyled(io, " lint ", color=:red)
3535
end
3636
hasmeta(x::EXPR) = x.meta isa Meta
3737
hasbinding(m::Meta) = m.binding isa Binding
@@ -168,7 +168,7 @@ end
168168
169169
Performs a semantic pass across a project from the entry point `file`. A first pass traverses the top-level scope after which secondary passes handle delayed scopes (e.g. functions). These secondary passes can be, optionally, very light and only seek to resovle references (e.g. link symbols to bindings). This can be done by supplying a list of expressions on which the full secondary pass should be made (`modified_expr`), all others will receive the light-touch version.
170170
"""
171-
function semantic_pass(file, modified_expr = nothing)
171+
function semantic_pass(file, modified_expr=nothing)
172172
server = file.server
173173
env = getenv(file, server)
174174
setscope!(getcst(file), Scope(nothing, getcst(file), Dict(), Dict{Symbol,Any}(:Base => env.symbols[:Base], :Core => env.symbols[:Core]), nothing))

src/bindings.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ function mark_binding!(x::EXPR, val=x)
139139
return x
140140
end
141141

142-
function mark_parameters(sig::EXPR, params = String[])
142+
function mark_parameters(sig::EXPR, params=String[])
143143
if CSTParser.issubtypedecl(sig)
144144
mark_parameters(sig.args[1], params)
145145
elseif iswhere(sig)
@@ -365,7 +365,7 @@ function add_binding(x, state, scope=state.scope)
365365
end
366366

367367
function enforce_hard_scope(x::EXPR, scope)
368-
scope.expr.head === :for && is_in_fexpr(x, x-> x == scope.expr.args[1])
368+
scope.expr.head === :for && is_in_fexpr(x, x -> x == scope.expr.args[1])
369369
end
370370

371371
name_is_getfield(x) = parentof(x) isa EXPR && parentof(parentof(x)) isa EXPR && CSTParser.is_getfield_w_quotenode(parentof(parentof(x)))

src/coretypes.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ isva(x::SymbolServer.FakeUnionAll) = isva(x.body)
3939
@static if Core.Vararg isa Core.Type
4040
function isva(x)
4141
return (x isa SymbolServer.FakeTypeName && x.name.name == :Vararg &&
42-
x.name.parent isa SymbolServer.VarRef && x.name.parent.name == :Core)
42+
x.name.parent isa SymbolServer.VarRef && x.name.parent.name == :Core)
4343
end
4444
else
4545
isva(x) = x isa SymbolServer.FakeTypeofVararg

src/exception_types.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ end
44

55
function Base.showerror(io::IO, ex::SLInvalidPath)
66
print(io, ex.msg)
7-
end
7+
end

src/imports.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ end
8686

8787
function has_workspace_package(server, name)
8888
haskey(server.workspacepackages, name) &&
89-
hasscope(getcst(server.workspacepackages[name])) &&
90-
haskey(scopeof(getcst(server.workspacepackages[name])).names, name) &&
91-
scopeof(getcst(server.workspacepackages[name])).names[name] isa Binding &&
92-
scopeof(getcst(server.workspacepackages[name])).names[name].val isa EXPR &&
93-
CSTParser.defines_module(scopeof(getcst(server.workspacepackages[name])).names[name].val)
89+
hasscope(getcst(server.workspacepackages[name])) &&
90+
haskey(scopeof(getcst(server.workspacepackages[name])).names, name) &&
91+
scopeof(getcst(server.workspacepackages[name])).names[name] isa Binding &&
92+
scopeof(getcst(server.workspacepackages[name])).names[name].val isa EXPR &&
93+
CSTParser.defines_module(scopeof(getcst(server.workspacepackages[name])).names[name].val)
9494
end
9595

9696
function add_to_imported_modules(scope::Scope, name::Symbol, val)
@@ -121,8 +121,8 @@ function _get_field(par, arg, state)
121121
if par isa SymbolServer.EnvStore
122122
if (arg_scope = retrieve_scope(arg)) !== nothing && (tlm = get_named_toplevel_module(arg_scope, arg_str_rep)) !== nothing && hasbinding(tlm)
123123
return bindingof(tlm)
124-
# elseif has_workspace_package(state.server, arg_str_rep)
125-
# return scopeof(getcst(state.server.workspacepackages[arg_str_rep])).names[arg_str_rep]
124+
# elseif has_workspace_package(state.server, arg_str_rep)
125+
# return scopeof(getcst(state.server.workspacepackages[arg_str_rep])).names[arg_str_rep]
126126
elseif haskey(par, Symbol(arg_str_rep))
127127
if isempty(state.env.project_deps) || Symbol(arg_str_rep) in state.env.project_deps
128128
return par[Symbol(arg_str_rep)]

src/interface.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function setup_server(env = dirname(SymbolServer.Pkg.Types.Context().env.project_file), depot = first(SymbolServer.Pkg.depots()), cache = joinpath(dirname(pathof(SymbolServer)), "..", "store"))
1+
function setup_server(env=dirname(SymbolServer.Pkg.Types.Context().env.project_file), depot=first(SymbolServer.Pkg.depots()), cache=joinpath(dirname(pathof(SymbolServer)), "..", "store"))
22
server = StaticLint.FileServer()
33
ssi = SymbolServerInstance(depot, cache)
44
_, symbols = SymbolServer.getstore(ssi, env)
@@ -14,7 +14,7 @@ Parse a string and run a semantic pass over it. This will mark scopes, bindings,
1414
references, and lint hints. An annotated `EXPR` is returned or, if `gethints = true`,
1515
it is paired with a collected list of errors/hints.
1616
"""
17-
function lint_string(s::String, server = setup_server(); gethints = false)
17+
function lint_string(s::String, server=setup_server(); gethints=false)
1818
empty!(server.files)
1919
f = File("", s, CSTParser.parse(s, true), nothing, server)
2020
env = getenv(f, server)
@@ -38,7 +38,7 @@ in the project will be loaded automatically (calls to `include` with complicated
3838
are not handled, see `followinclude` for details). A `FileServer` will be returned
3939
containing the `File`s of the package.
4040
"""
41-
function lint_file(rootpath, server = setup_server(); gethints = false)
41+
function lint_file(rootpath, server=setup_server(); gethints=false)
4242
empty!(server.files)
4343
root = loadfile(server, rootpath)
4444
semantic_pass(root)
@@ -47,7 +47,7 @@ function lint_file(rootpath, server = setup_server(); gethints = false)
4747
end
4848
if gethints
4949
hints = []
50-
for (p,f) in server.files
50+
for (p, f) in server.files
5151
append!(hints, [(x, string(haserror(x) ? LintCodeDescriptions[x.meta.error] : "Missing reference", " at offset ", offset, " of ", p)) for (offset, x) in collect_hints(f.cst, getenv(f, server))])
5252
end
5353
return root, hints

src/linting/checks.jl

Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
@enum(
2-
LintCodes,
3-
4-
MissingRef,
2+
LintCodes, MissingRef,
53
IncorrectCallArgs,
64
IncorrectIterSpec,
75
NothingEquality,
@@ -181,9 +179,9 @@ function func_nargs(x::EXPR)
181179
maxargs !== typemax(Int) && (maxargs += 1)
182180
end
183181
elseif issplat(arg) ||
184-
(isdeclaration(arg) &&
185-
((isidentifier(arg.args[2]) && valofid(arg.args[2]) == "Vararg") ||
186-
(iscurly(arg.args[2]) && isidentifier(arg.args[2].args[1]) && valofid(arg.args[2].args[1]) == "Vararg")))
182+
(isdeclaration(arg) &&
183+
((isidentifier(arg.args[2]) && valofid(arg.args[2]) == "Vararg") ||
184+
(iscurly(arg.args[2]) && isidentifier(arg.args[2].args[1]) && valofid(arg.args[2].args[1]) == "Vararg")))
187185
maxargs = typemax(Int)
188186
else
189187
minargs += 1
@@ -247,9 +245,9 @@ end
247245
# compare_f_call(m_counts, call_counts) = true # fallback method
248246

249247
function compare_f_call(
250-
(ref_minargs, ref_maxargs, ref_kws, kwsplat),
251-
(act_minargs, act_maxargs, act_kws),
252-
)
248+
(ref_minargs, ref_maxargs, ref_kws, kwsplat),
249+
(act_minargs, act_maxargs, act_kws),
250+
)
253251
# check matching on positional arguments
254252
if act_maxargs == typemax(Int)
255253
act_minargs <= act_maxargs < ref_minargs && return false
@@ -269,10 +267,10 @@ end
269267

270268
function is_something_with_methods(x::Binding)
271269
(CoreTypes.isfunction(x.type) && x.val isa EXPR) ||
272-
(CoreTypes.isdatatype(x.type) && x.val isa EXPR && CSTParser.defines_struct(x.val)) ||
273-
(x.val isa SymbolServer.FunctionStore || x.val isa SymbolServer.DataTypeStore)
270+
(CoreTypes.isdatatype(x.type) && x.val isa EXPR && CSTParser.defines_struct(x.val)) ||
271+
(x.val isa SymbolServer.FunctionStore || x.val isa SymbolServer.DataTypeStore)
274272
end
275-
is_something_with_methods(x::T) where T <: Union{SymbolServer.FunctionStore,SymbolServer.DataTypeStore} = true
273+
is_something_with_methods(x::T) where T<:Union{SymbolServer.FunctionStore,SymbolServer.DataTypeStore} = true
276274
is_something_with_methods(x) = false
277275

278276
function check_call(x, env::ExternalEnv)
@@ -376,13 +374,13 @@ function check_incorrect_iter_spec(x, body, env)
376374
if headof(rng) === :FLOAT || headof(rng) === :INTEGER || (iscall(rng) && refof(rng.args[1]) === getsymbols(env)[:Base][:length])
377375
seterror!(x, IncorrectIterSpec)
378376
elseif iscall(rng) && valof(rng.args[1]) == ":" &&
379-
length(rng.args) === 3 &&
380-
headof(rng.args[2]) === :INTEGER &&
381-
iscall(rng.args[3]) &&
382-
length(rng.args[3].args) > 1 && (
383-
refof(rng.args[3].args[1]) === getsymbols(env)[:Base][:length] ||
384-
refof(rng.args[3].args[1]) === getsymbols(env)[:Base][:size]
385-
)
377+
length(rng.args) === 3 &&
378+
headof(rng.args[2]) === :INTEGER &&
379+
iscall(rng.args[3]) &&
380+
length(rng.args[3].args) > 1 && (
381+
refof(rng.args[3].args[1]) === getsymbols(env)[:Base][:length] ||
382+
refof(rng.args[3].args[1]) === getsymbols(env)[:Base][:size]
383+
)
386384
if length(x.args) >= 1
387385
lhs = x.args[1]
388386
arr = rng.args[3].args[2]
@@ -425,14 +423,14 @@ end
425423
function check_nothing_equality(x::EXPR, env::ExternalEnv)
426424
if isbinarycall(x) && length(x.args) == 3
427425
if valof(x.args[1]) == "==" && (
428-
(valof(x.args[2]) == "nothing" && refof(x.args[2]) === getsymbols(env)[:Core][:nothing]) ||
429-
(valof(x.args[3]) == "nothing" && refof(x.args[3]) === getsymbols(env)[:Core][:nothing])
430-
)
426+
(valof(x.args[2]) == "nothing" && refof(x.args[2]) === getsymbols(env)[:Core][:nothing]) ||
427+
(valof(x.args[3]) == "nothing" && refof(x.args[3]) === getsymbols(env)[:Core][:nothing])
428+
)
431429
seterror!(x.args[1], NothingEquality)
432430
elseif valof(x.args[1]) == "!=" && (
433-
(valof(x.args[2]) == "nothing" && refof(x.args[2]) === getsymbols(env)[:Core][:nothing]) ||
434-
(valof(x.args[3]) == "nothing" && refof(x.args[3]) === getsymbols(env)[:Core][:nothing])
435-
)
431+
(valof(x.args[2]) == "nothing" && refof(x.args[2]) === getsymbols(env)[:Core][:nothing]) ||
432+
(valof(x.args[3]) == "nothing" && refof(x.args[3]) === getsymbols(env)[:Core][:nothing])
433+
)
436434
seterror!(x.args[1], NothingNotEq)
437435
end
438436
end
@@ -524,9 +522,9 @@ end
524522

525523
function check_modulename(x::EXPR)
526524
if CSTParser.defines_module(x) && # x is a module
527-
scopeof(x) isa Scope && parentof(scopeof(x)) isa Scope && # it has a scope and a parent scope
528-
CSTParser.defines_module(parentof(scopeof(x)).expr) && # the parent scope is a module
529-
valof(CSTParser.get_name(x)) == valof(CSTParser.get_name(parentof(scopeof(x)).expr)) # their names match
525+
scopeof(x) isa Scope && parentof(scopeof(x)) isa Scope && # it has a scope and a parent scope
526+
CSTParser.defines_module(parentof(scopeof(x)).expr) && # the parent scope is a module
527+
valof(CSTParser.get_name(x)) == valof(CSTParser.get_name(parentof(scopeof(x)).expr)) # their names match
530528
seterror!(CSTParser.get_name(x), InvalidModuleName)
531529
end
532530
end
@@ -536,7 +534,7 @@ function check_farg_unused(x::EXPR)
536534
if CSTParser.defines_function(x)
537535
sig = CSTParser.rem_wheres_decls(CSTParser.get_sig(x))
538536
if (headof(x) === :function && length(x.args) == 2 && x.args[2] isa EXPR && length(x.args[2].args) == 1 && CSTParser.isliteral(x.args[2].args[1])) ||
539-
(length(x.args) > 1 && headof(x.args[2]) === :block && length(x.args[2].args) == 1 && CSTParser.isliteral(x.args[2].args[1]))
537+
(length(x.args) > 1 && headof(x.args[2]) === :block && length(x.args[2].args) == 1 && CSTParser.isliteral(x.args[2].args[1]))
540538
return # Allow functions that return constants
541539
end
542540
if iscall(sig)
@@ -573,12 +571,12 @@ function check_farg_unused_(arg, arg_names)
573571
valof(b.name) isa String && all_underscore(valof(b.name)) && return false
574572

575573
if b === nothing ||
576-
# no refs:
574+
# no refs:
577575
isempty(b.refs) ||
578-
# only self ref:
576+
# only self ref:
579577
(length(b.refs) == 1 && first(b.refs) == b.name) ||
580-
# first usage has binding:
581-
(length(b.refs) > 1 && b.refs[2] isa EXPR && hasbinding(b.refs[2]))
578+
# first usage has binding:
579+
(length(b.refs) > 1 && b.refs[2] isa EXPR && hasbinding(b.refs[2]))
582580
seterror!(arg, UnusedFunctionArgument)
583581
end
584582

@@ -598,8 +596,8 @@ end
598596

599597
function is_nospecialize_call(x)
600598
CSTParser.ismacrocall(x) &&
601-
CSTParser.ismacroname(x.args[1]) &&
602-
is_nospecialize(x.args[1])
599+
CSTParser.ismacroname(x.args[1]) &&
600+
is_nospecialize(x.args[1])
603601
end
604602

605603
"""
@@ -619,8 +617,8 @@ function collect_hints(x::EXPR, env, missingrefs=:all, isquoted=false, errs=Tupl
619617
push!(errs, (pos, x))
620618
elseif !isquoted
621619
if missingrefs != :none && isidentifier(x) && !hasref(x) &&
622-
!(valof(x) == "var" && parentof(x) isa EXPR && isnonstdid(parentof(x))) &&
623-
!((valof(x) == "stdcall" || valof(x) == "cdecl" || valof(x) == "fastcall" || valof(x) == "thiscall" || valof(x) == "llvmcall") && is_in_fexpr(x, x -> iscall(x) && isidentifier(x.args[1]) && valof(x.args[1]) == "ccall"))
620+
!(valof(x) == "var" && parentof(x) isa EXPR && isnonstdid(parentof(x))) &&
621+
!((valof(x) == "stdcall" || valof(x) == "cdecl" || valof(x) == "fastcall" || valof(x) == "thiscall" || valof(x) == "llvmcall") && is_in_fexpr(x, x -> iscall(x) && isidentifier(x.args[1]) && valof(x.args[1]) == "ccall"))
624622

625623
push!(errs, (pos, x))
626624
elseif haserror(x) && errorof(x) isa StaticLint.LintCodes
@@ -649,7 +647,7 @@ end
649647

650648
function should_mark_missing_getfield_ref(x, env)
651649
if isidentifier(x) && !hasref(x) && # x has no ref
652-
parentof(x) isa EXPR && headof(parentof(x)) === :quotenode && parentof(parentof(x)) isa EXPR && is_getfield(parentof(parentof(x))) # x is the rhs of a getproperty
650+
parentof(x) isa EXPR && headof(parentof(x)) === :quotenode && parentof(parentof(x)) isa EXPR && is_getfield(parentof(parentof(x))) # x is the rhs of a getproperty
653651
lhsref = refof_maybe_getfield(parentof(parentof(x)).args[1])
654652
hasref(x) && return false # We've resolved
655653
if lhsref isa SymbolServer.ModuleStore || (lhsref isa Binding && lhsref.val isa SymbolServer.ModuleStore)
@@ -718,14 +716,14 @@ function is_type_of_call_to_getproperty(x::EXPR)
718716
if iscall(x)
719717
func_name = x.args[1]
720718
return (isidentifier(func_name) && valof(func_name) == "getproperty") || # getproperty()
721-
(is_getfield_w_quotenode(func_name) && isidentifier(func_name.args[2].args[1]) && valof(func_name.args[2].args[1]) == "getproperty") # Base.getproperty()
719+
(is_getfield_w_quotenode(func_name) && isidentifier(func_name.args[2].args[1]) && valof(func_name.args[2].args[1]) == "getproperty") # Base.getproperty()
722720
end
723721
return false
724722
end
725723

726724
return parentof(x) isa EXPR && parentof(parentof(x)) isa EXPR &&
727-
((isdeclaration(parentof(x)) && x === parentof(x).args[2] && is_call_to_getproperty(parentof(parentof(x)))) ||
728-
(iscurly(parentof(x)) && x === parentof(x).args[1] && isdeclaration(parentof(parentof(x))) && parentof(parentof(parentof(x))) isa EXPR && is_call_to_getproperty(parentof(parentof(parentof(x))))))
725+
((isdeclaration(parentof(x)) && x === parentof(x).args[2] && is_call_to_getproperty(parentof(parentof(x)))) ||
726+
(iscurly(parentof(x)) && x === parentof(x).args[1] && isdeclaration(parentof(parentof(x))) && parentof(parentof(parentof(x))) isa EXPR && is_call_to_getproperty(parentof(parentof(parentof(x))))))
729727
end
730728

731729
isunionfaketype(t::SymbolServer.FakeTypeName) = t.name.name === :Union && t.name.parent isa SymbolServer.VarRef && t.name.parent.name === :Core
@@ -958,8 +956,8 @@ function check_unused_binding(b::Binding, scope::Scope)
958956
if headof(scope.expr) !== :struct && headof(scope.expr) !== :tuple && !all_underscore(valof(b.name))
959957
refs = loose_refs(b)
960958
if (isempty(refs) || length(refs) == 1 && refs[1] == b.name) &&
961-
!is_sig_arg(b.name) && !is_overwritten_in_loop(b.name) &&
962-
!is_overwritten_subsequently(b, scope) && !is_kw_of_macrocall(b)
959+
!is_sig_arg(b.name) && !is_overwritten_in_loop(b.name) &&
960+
!is_overwritten_subsequently(b, scope) && !is_kw_of_macrocall(b)
963961
seterror!(b.name, UnusedBinding)
964962
end
965963
end

0 commit comments

Comments
 (0)