diff --git a/languages/julia/highlights.scm b/languages/julia/highlights.scm index 9309599..2f033f4 100644 --- a/languages/julia/highlights.scm +++ b/languages/julia/highlights.scm @@ -68,15 +68,89 @@ ; Type annotations (parametrized_type_expression [ - (identifier) @type - (field_expression - (identifier) @type .) + ((identifier) @type) ; match T + (field_expression + (identifier) @module + (identifier) @type + ) ; match MyModule.T + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @type) ; match MyModule.MySubModule.T + (field_expression + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @module) + (identifier) @type) ; match MyModule.MySubmodule.MySubSubModule.T) ] (curly_expression - (_) @type)) + [ + ((identifier) @type) ; match T + (_) @type + (field_expression + (identifier) @module + (identifier) @type + ) ; match MyModule.T + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @type) ; match MyModule.MySubModule.T + (field_expression + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @module) + (identifier) @type) ; match MyModule.MySubmodule.MySubSubModule.T + (unary_expression + (operator) @operator + [ + ((identifier) @type) ; match T + (field_expression + (identifier) @module + (identifier) @type + ) ; match MyModule.T + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @type) ; match MyModule.MySubModule.T + (field_expression + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @module) + (identifier) @type) ; match MyModule.MySubmodule.MySubSubModule.T + ] (#any-of? @operator "<:" ">:")) + ] + )) ; Zed - change to capture types prefixed with module names. (typed_expression - (identifier) @type .) + (identifier) + [ + ((identifier) @type) ; match T + (field_expression + (identifier) @module + (identifier) @type + ) ; match MyModule.T + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @type) ; match MyModule.MySubModule.T + (field_expression + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @module) + (identifier) @type) ; match MyModule.MySubmodule.MySubSubModule.T + ]) ; Zed - change to capture types prefixed with module names. (unary_typed_expression (identifier) @type .) @@ -85,9 +159,45 @@ (_) @type .) (binary_expression - (_) @type + [ + ((identifier) @type) ; match T + (field_expression + (identifier) @module + (identifier) @type + ) ; match MyModule.T + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @type) ; match MyModule.MySubModule.T + (field_expression + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @module) + (identifier) @type) ; match MyModule.MySubmodule.MySubSubModule.T + ] (operator) @operator - (_) @type + [ + ((identifier) @type) ; match T + (field_expression + (identifier) @module + (identifier) @type + ) ; match MyModule.T + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @type) ; match MyModule.MySubModule.T + (field_expression + (field_expression + (field_expression + (identifier) @module + (identifier) @module) + (identifier) @module) + (identifier) @type) ; match MyModule.MySubmodule.MySubSubModule.T + ] (#any-of? @operator "<:" ">:")) ; Built-in types diff --git a/syntax-test-cases/edge-cases.jl b/syntax-test-cases/edge-cases.jl index 56275fd..9af703b 100644 --- a/syntax-test-cases/edge-cases.jl +++ b/syntax-test-cases/edge-cases.jl @@ -8,7 +8,7 @@ begin # this is a block, not an index end -# ------------ +# ------------ # Zed specials # ------------ @@ -34,6 +34,32 @@ function foo end function foo(x) 2x end function Base.foo(x) 2x end +# Types +struct Bar + a::T + b::MyModule.T # pass + c::MyModule.MySubModule.T # pass + d::MyModule.MySubModule.MySubSubModule.T # pass + d::MyModule.MySubModule.MySubSubModule.MySubSubSubModule.T # broken + e::MyModule.MySubModule.T{Int} # pass + f::MyModule.MySubModule.T{MyModule.Int} # pass + g::MyModule.MySubModule.T{MyModule.MySubModule.Int} # pass + h::MyModule.MySubModule.MySubSubModule.T{MyModule.MySubModule.MySubSubModule.Int} # pass + i::Array{<:MyModule.MySubModule.T} # pass + j::Array{>:MyModule.MySubModule.T} # pass + k::Tuple{MyModule.MySubModule.T,MyModule.MySubModule.U} # pass +end + +function bar(w::T) end +function bar(x::MyModule.T, y::MyModule.T) nothing end +function bar(y::MyModule.MySubmodule.T) nothing end +function bar(z::MyModule.MySubmodule.T{MyModule.MySubModule.Int}) nothing end +function bar(z::T) where {T<:MyModule.MySubModule.MySubSubModule.U} nothing end +function bar(z::T) where {T>:MyModule.MySubModule.MySubSubModule.U} nothing end + +bar(z::MyModule.MySubmodule.T{MyModule.MySubModule.Int}) where {T<:MyModule.MySubModule.MySubSubModule.U} = nothing +Base.bar(z::MyModule.MySubmodule.T{MyModule.MySubModule.Int}) where {T<:MyModule.MySubModule.MySubSubModule.U} = nothing + # Short function definitions # (highlight the function name as @function.definition # and the equal sign as @keyword.function)