Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update to use JuliaSyntax.jl v1.0.0 #9

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ StyledStrings = "f489334b-da3d-4c2e-b8f0-e476e12c162b"

[compat]
StyledStrings = "1.0"
julia = "1.11"
julia = "1.12"

[extras]
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
Expand Down
58 changes: 28 additions & 30 deletions src/JuliaSyntaxHighlighting.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module JuliaSyntaxHighlighting

import Base: JuliaSyntax, AnnotatedString, annotate!
import Base.JuliaSyntax: @K_str, Kind, GreenNode, parseall, kind, flags
import Base.JuliaSyntax: @K_str, Kind, GreenNode, parseall, kind, flags, children, numchildren, span
using StyledStrings: Face, addface!

public highlight, highlight!
Expand Down Expand Up @@ -182,8 +182,8 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int},
lineage::GreenLineage, ctx::HighlightContext; syntax_errors::Bool = false)
(; node, parent) = lineage
(; content, offset, lnode, pdepths) = ctx
region = firstindex(content)+offset:node.span+offset
regionstr = view(content, firstindex(content)+offset:prevind(content, node.span+offset+1))
region = firstindex(content)+offset:span(node)+offset
regionstr = view(content, firstindex(content)+offset:prevind(content, span(node)+offset+1))
nkind = node.head.kind
pnode = if !isnothing(parent) parent.node end
pkind = if !isnothing(parent) kind(parent.node) end
Expand All @@ -195,7 +195,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int},
!JuliaSyntax.is_prec_assignment(node) &&
!JuliaSyntax.is_word_operator(node) &&
nkind != K"." && nkind != K"..." &&
(JuliaSyntax.is_trivia(node) || !JuliaSyntax.haschildren(node))
(JuliaSyntax.is_trivia(node) || JuliaSyntax.is_leaf(node))
face = if nkind == K"Identifier"
if pkind == K"curly"
:julia_type
Expand All @@ -209,9 +209,9 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int},
:julia_type
end
end
elseif nkind == K"macrocall" && length(node.args) >= 2 &&
kind(node.args[1]) == K"@" && kind(node.args[2]) == K"MacroName"
region = first(region):first(region)+node.args[2].span
elseif nkind == K"macrocall" && numchildren(node) >= 2 &&
kind(node[1]) == K"@" && kind(node[2]) == K"MacroName"
region = first(region):first(region)+span(node[2])
:julia_macro
elseif nkind == K"StringMacroName"; :julia_macro
elseif nkind == K"CmdMacroName"; :julia_macro
Expand All @@ -221,15 +221,15 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int},
else
literal_typedecl = findfirst(
c ->kind(c) == K"::" && JuliaSyntax.is_trivia(c),
node.args)
children(node))
if !isnothing(literal_typedecl)
shift = sum(c ->Int(c.span), node.args[1:literal_typedecl])
shift = sum(c ->Int(span(c)), node[1:literal_typedecl])
region = first(region)+shift:last(region)
:julia_type
end
end
elseif nkind == K"quote" && length(node.args) == 2 &&
kind(node.args[1]) == K":" && kind(node.args[2]) == K"Identifier"
elseif nkind == K"quote" && numchildren(node) == 2 &&
kind(node[1]) == K":" && kind(node[2]) == K"Identifier"
:julia_symbol
elseif nkind == K"Comment"; :julia_comment
elseif nkind == K"String"; :julia_string
Expand All @@ -241,14 +241,14 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int},
(highlights[end] = (highlights[end][1], :face, :julia_char_delim))
:julia_char
elseif nkind == K"'" && kind(lnode) == K"Char"; :julia_char_delim
elseif nkind == K"true" || nkind == K"false"; :julia_bool
elseif nkind == K"Bool"; :julia_bool
elseif JuliaSyntax.is_number(nkind); :julia_number
elseif JuliaSyntax.is_prec_assignment(nkind) && JuliaSyntax.is_trivia(node);
if nkind == K"="
ifelse(ppkind == K"for", :julia_keyword, :julia_assignment)
else # updating for <op>=
push!(highlights, (firstindex(content)+offset:node.span+offset-1, :face, :julia_operator))
push!(highlights, (node.span+offset:node.span+offset, :face, :julia_assignment))
push!(highlights, (firstindex(content)+offset:span(node)+offset-1, :face, :julia_operator))
push!(highlights, (span(node)+offset:span(node)+offset, :face, :julia_assignment))
nothing
end
elseif nkind == K";" && pkind == K"parameters" && pnode == lnode
Expand All @@ -261,9 +261,9 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int},
else
literal_where = findfirst(
c ->kind(c) == K"where" && JuliaSyntax.is_trivia(c),
node.args)
children(node))
if !isnothing(literal_where)
shift = sum(c ->Int(c.span), node.args[1:literal_where])
shift = sum(c ->Int(span(c)), node[1:literal_where])
region = first(region)+shift:last(region)
:julia_type
end
Expand All @@ -281,8 +281,8 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int},
:julia_broadcast
elseif nkind in (K"call", K"dotcall") && JuliaSyntax.is_prefix_call(node)
argoffset, arg1 = 0, nothing
for arg in node.args
argoffset += arg.span
for arg in children(node)
argoffset += span(arg)
if !JuliaSyntax.is_trivia(arg)
arg1 = arg
break
Expand All @@ -293,11 +293,11 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int},
region = first(region):first(region)+argoffset-1
name = Symbol(regionstr)
ifelse(name in BUILTIN_FUNCTIONS, :julia_builtin, :julia_funcall)
elseif kind(arg1) == K"." && length(arg1.args) == 3 &&
kind(arg1.args[end]) == K"quote" &&
length(arg1.args[end].args) == 1 &&
kind(arg1.args[end].args[1]) == K"Identifier"
region = first(region)+argoffset-arg1.args[end].args[1].span:first(region)+argoffset-1
elseif kind(arg1) == K"." && numchildren(arg1) == 3 &&
kind(arg1[end]) == K"quote" &&
numchildren(arg1[end]) == 1 &&
kind(arg1[end][1]) == K"Identifier"
region = first(region)+argoffset-span(arg1[end][1]):first(region)+argoffset-1
name = Symbol(regionstr)
ifelse(name in BUILTIN_FUNCTIONS, :julia_builtin, :julia_funcall)
end
Expand Down Expand Up @@ -336,13 +336,13 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int},
:face, :julia_backslash_literal))
end
end
isempty(node.args) && return
numchildren(node) == 0 && return
lnode = node
for child in node.args
for child in children(node)
cctx = HighlightContext(content, offset, lnode, pdepths)
_hl_annotations!(highlights, GreenLineage(child, lineage), cctx)
lnode = child
offset += child.span
offset += span(child)
end
end

Expand Down Expand Up @@ -370,11 +370,10 @@ julia> JuliaSyntaxHighlighting.highlight("sum(1:8)")
"sum(1:8)"

julia> JuliaSyntaxHighlighting.highlight("sum(1:8)") |> Base.annotations
6-element Vector{@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}}:
5-element Vector{@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}}:
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((1:3, :face, :julia_funcall))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((4:4, :face, :julia_rainbow_paren_1))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((5:5, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((6:6, :face, :julia_operator))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((7:7, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((8:8, :face, :julia_rainbow_paren_1))
```
Expand Down Expand Up @@ -420,11 +419,10 @@ julia> JuliaSyntaxHighlighting.highlight!(str)
"sum(1:8)"

julia> Base.annotations(str)
6-element Vector{@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}}:
5-element Vector{@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}}:
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((1:3, :face, :julia_funcall))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((4:4, :face, :julia_rainbow_paren_1))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((5:5, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((6:6, :face, :julia_operator))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((7:7, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((8:8, :face, :julia_rainbow_paren_1))
```
Expand Down
1 change: 0 additions & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ sum1to8_highlighted = Base.AnnotatedString("sum(1:8)", [
(1:3, :face, :julia_funcall),
(4:4, :face, :julia_rainbow_paren_1),
(5:5, :face, :julia_number),
(6:6, :face, :julia_operator),
(7:7, :face, :julia_number),
(8:8, :face, :julia_rainbow_paren_1)
])
Expand Down
Loading