From 455c7e895358f62cfecf38b2b7da211f6eee9747 Mon Sep 17 00:00:00 2001 From: Chengyu HAN Date: Mon, 27 Jan 2025 11:19:25 +0800 Subject: [PATCH 01/11] compat: Update julia version to v1.12 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 252ae98..5715ab1 100644 --- a/Project.toml +++ b/Project.toml @@ -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" From d5d2c339963ccb66375ead9a0c392cce41a65f73 Mon Sep 17 00:00:00 2001 From: Chengyu Han Date: Mon, 27 Jan 2025 11:30:24 +0800 Subject: [PATCH 02/11] Replace K"true" and K"false" with K"Bool" https://github.com/JuliaLang/JuliaSyntax.jl/pull/488 --- src/JuliaSyntaxHighlighting.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JuliaSyntaxHighlighting.jl b/src/JuliaSyntaxHighlighting.jl index 6a31e09..33fee24 100644 --- a/src/JuliaSyntaxHighlighting.jl +++ b/src/JuliaSyntaxHighlighting.jl @@ -241,7 +241,7 @@ 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"=" From 0ad6176ab46d356ad30c1e2bdb4e350ff93c62b4 Mon Sep 17 00:00:00 2001 From: Chengyu Han Date: Mon, 27 Jan 2025 11:31:01 +0800 Subject: [PATCH 03/11] Rename haschildren() to is_leaf() https://github.com/JuliaLang/JuliaSyntax.jl/pull/483 --- src/JuliaSyntaxHighlighting.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JuliaSyntaxHighlighting.jl b/src/JuliaSyntaxHighlighting.jl index 33fee24..3a0916d 100644 --- a/src/JuliaSyntaxHighlighting.jl +++ b/src/JuliaSyntaxHighlighting.jl @@ -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 From 743a2ad9c0640cf18e962a5036e828acb4cfcb54 Mon Sep 17 00:00:00 2001 From: Chengyu Han Date: Mon, 27 Jan 2025 11:59:06 +0800 Subject: [PATCH 04/11] Use `numchildren` - `length(node.args)` => `numchildren(node)` --- src/JuliaSyntaxHighlighting.jl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/JuliaSyntaxHighlighting.jl b/src/JuliaSyntaxHighlighting.jl index 3a0916d..84a41bb 100644 --- a/src/JuliaSyntaxHighlighting.jl +++ b/src/JuliaSyntaxHighlighting.jl @@ -209,7 +209,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, :julia_type end end - elseif nkind == K"macrocall" && length(node.args) >= 2 && + elseif nkind == K"macrocall" && numchildren(node) >= 2 && kind(node.args[1]) == K"@" && kind(node.args[2]) == K"MacroName" region = first(region):first(region)+node.args[2].span :julia_macro @@ -228,7 +228,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, :julia_type end end - elseif nkind == K"quote" && length(node.args) == 2 && + elseif nkind == K"quote" && numchildren(node) == 2 && kind(node.args[1]) == K":" && kind(node.args[2]) == K"Identifier" :julia_symbol elseif nkind == K"Comment"; :julia_comment @@ -293,9 +293,9 @@ 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 && + elseif kind(arg1) == K"." && numchildren(arg1) == 3 && kind(arg1.args[end]) == K"quote" && - length(arg1.args[end].args) == 1 && + numchildren(arg1.args[end]) == 1 && kind(arg1.args[end].args[1]) == K"Identifier" region = first(region)+argoffset-arg1.args[end].args[1].span:first(region)+argoffset-1 name = Symbol(regionstr) From 71d7c526e6c71c62d9976ae44c897ce0575aa7b1 Mon Sep 17 00:00:00 2001 From: Chengyu Han Date: Mon, 27 Jan 2025 12:02:36 +0800 Subject: [PATCH 05/11] Use `node[]` to access childrens - `node\.args\[(\d*)\]` => `node[$1]` - `.args[` => `[` --- src/JuliaSyntaxHighlighting.jl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/JuliaSyntaxHighlighting.jl b/src/JuliaSyntaxHighlighting.jl index 84a41bb..0827420 100644 --- a/src/JuliaSyntaxHighlighting.jl +++ b/src/JuliaSyntaxHighlighting.jl @@ -210,8 +210,8 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, end end elseif nkind == K"macrocall" && numchildren(node) >= 2 && - kind(node.args[1]) == K"@" && kind(node.args[2]) == K"MacroName" - region = first(region):first(region)+node.args[2].span + kind(node[1]) == K"@" && kind(node[2]) == K"MacroName" + region = first(region):first(region)+node[2].span :julia_macro elseif nkind == K"StringMacroName"; :julia_macro elseif nkind == K"CmdMacroName"; :julia_macro @@ -223,13 +223,13 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, c ->kind(c) == K"::" && JuliaSyntax.is_trivia(c), node.args) if !isnothing(literal_typedecl) - shift = sum(c ->Int(c.span), node.args[1:literal_typedecl]) + shift = sum(c ->Int(c.span), node[1:literal_typedecl]) region = first(region)+shift:last(region) :julia_type end end elseif nkind == K"quote" && numchildren(node) == 2 && - kind(node.args[1]) == K":" && kind(node.args[2]) == K"Identifier" + kind(node[1]) == K":" && kind(node[2]) == K"Identifier" :julia_symbol elseif nkind == K"Comment"; :julia_comment elseif nkind == K"String"; :julia_string @@ -263,7 +263,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, c ->kind(c) == K"where" && JuliaSyntax.is_trivia(c), node.args) if !isnothing(literal_where) - shift = sum(c ->Int(c.span), node.args[1:literal_where]) + shift = sum(c ->Int(c.span), node[1:literal_where]) region = first(region)+shift:last(region) :julia_type end @@ -294,10 +294,10 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, name = Symbol(regionstr) ifelse(name in BUILTIN_FUNCTIONS, :julia_builtin, :julia_funcall) elseif kind(arg1) == K"." && numchildren(arg1) == 3 && - kind(arg1.args[end]) == K"quote" && - numchildren(arg1.args[end]) == 1 && - kind(arg1.args[end].args[1]) == K"Identifier" - region = first(region)+argoffset-arg1.args[end].args[1].span:first(region)+argoffset-1 + kind(arg1[end]) == K"quote" && + numchildren(arg1[end]) == 1 && + kind(arg1[end][1]) == K"Identifier" + region = first(region)+argoffset-arg1[end][1].span:first(region)+argoffset-1 name = Symbol(regionstr) ifelse(name in BUILTIN_FUNCTIONS, :julia_builtin, :julia_funcall) end From ff7b687dcbe0c84b1c87a32949e33f165ccc20c4 Mon Sep 17 00:00:00 2001 From: Chengyu Han Date: Mon, 27 Jan 2025 12:03:44 +0800 Subject: [PATCH 06/11] Use `children()` - `node.args` => `children(node)` --- src/JuliaSyntaxHighlighting.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/JuliaSyntaxHighlighting.jl b/src/JuliaSyntaxHighlighting.jl index 0827420..755e8e4 100644 --- a/src/JuliaSyntaxHighlighting.jl +++ b/src/JuliaSyntaxHighlighting.jl @@ -221,7 +221,7 @@ 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[1:literal_typedecl]) region = first(region)+shift:last(region) @@ -261,7 +261,7 @@ 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[1:literal_where]) region = first(region)+shift:last(region) @@ -281,7 +281,7 @@ 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 + for arg in children(node) argoffset += arg.span if !JuliaSyntax.is_trivia(arg) arg1 = arg @@ -336,9 +336,9 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, :face, :julia_backslash_literal)) end end - isempty(node.args) && return + isempty(children(node)) && 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 From 709f50d694a50a3b9a3f570489f6f66f826a8a03 Mon Sep 17 00:00:00 2001 From: Chengyu Han Date: Mon, 27 Jan 2025 12:07:14 +0800 Subject: [PATCH 07/11] Use `span()` - `node.span` => `span(node)` --- src/JuliaSyntaxHighlighting.jl | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/JuliaSyntaxHighlighting.jl b/src/JuliaSyntaxHighlighting.jl index 755e8e4..395bf14 100644 --- a/src/JuliaSyntaxHighlighting.jl +++ b/src/JuliaSyntaxHighlighting.jl @@ -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 @@ -211,7 +211,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, end elseif nkind == K"macrocall" && numchildren(node) >= 2 && kind(node[1]) == K"@" && kind(node[2]) == K"MacroName" - region = first(region):first(region)+node[2].span + region = first(region):first(region)+span(node[2]) :julia_macro elseif nkind == K"StringMacroName"; :julia_macro elseif nkind == K"CmdMacroName"; :julia_macro @@ -223,7 +223,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, c ->kind(c) == K"::" && JuliaSyntax.is_trivia(c), children(node)) if !isnothing(literal_typedecl) - shift = sum(c ->Int(c.span), node[1:literal_typedecl]) + shift = sum(c ->Int(span(c)), node[1:literal_typedecl]) region = first(region)+shift:last(region) :julia_type end @@ -247,8 +247,8 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, if nkind == K"=" ifelse(ppkind == K"for", :julia_keyword, :julia_assignment) else # updating for = - 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 @@ -263,7 +263,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, c ->kind(c) == K"where" && JuliaSyntax.is_trivia(c), children(node)) if !isnothing(literal_where) - shift = sum(c ->Int(c.span), node[1:literal_where]) + shift = sum(c ->Int(span(c)), node[1:literal_where]) region = first(region)+shift:last(region) :julia_type end @@ -282,7 +282,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, elseif nkind in (K"call", K"dotcall") && JuliaSyntax.is_prefix_call(node) argoffset, arg1 = 0, nothing for arg in children(node) - argoffset += arg.span + argoffset += span(arg) if !JuliaSyntax.is_trivia(arg) arg1 = arg break @@ -297,7 +297,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, kind(arg1[end]) == K"quote" && numchildren(arg1[end]) == 1 && kind(arg1[end][1]) == K"Identifier" - region = first(region)+argoffset-arg1[end][1].span:first(region)+argoffset-1 + 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 @@ -342,7 +342,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, cctx = HighlightContext(content, offset, lnode, pdepths) _hl_annotations!(highlights, GreenLineage(child, lineage), cctx) lnode = child - offset += child.span + offset += span(child) end end From 70bb11a4745f4622c882fe7b7e6ae260b72b7ae2 Mon Sep 17 00:00:00 2001 From: Chengyu Han Date: Mon, 27 Jan 2025 12:17:47 +0800 Subject: [PATCH 08/11] import functions from JuliaSyntax --- src/JuliaSyntaxHighlighting.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JuliaSyntaxHighlighting.jl b/src/JuliaSyntaxHighlighting.jl index 395bf14..0b426b6 100644 --- a/src/JuliaSyntaxHighlighting.jl +++ b/src/JuliaSyntaxHighlighting.jl @@ -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! From 4411364fc737dd9cdc64e05b023195d76b5f0d42 Mon Sep 17 00:00:00 2001 From: Chengyu Han Date: Mon, 27 Jan 2025 12:30:48 +0800 Subject: [PATCH 09/11] Use `numchildren` to check if node is empty --- src/JuliaSyntaxHighlighting.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JuliaSyntaxHighlighting.jl b/src/JuliaSyntaxHighlighting.jl index 0b426b6..d5fbd19 100644 --- a/src/JuliaSyntaxHighlighting.jl +++ b/src/JuliaSyntaxHighlighting.jl @@ -336,7 +336,7 @@ function _hl_annotations!(highlights::Vector{@NamedTuple{region::UnitRange{Int}, :face, :julia_backslash_literal)) end end - isempty(children(node)) && return + numchildren(node) == 0 && return lnode = node for child in children(node) cctx = HighlightContext(content, offset, lnode, pdepths) From 19825143804683d086570f49a844f95c1a388e95 Mon Sep 17 00:00:00 2001 From: Chengyu Han Date: Mon, 27 Jan 2025 17:15:04 +0800 Subject: [PATCH 10/11] update tests --- test/runtests.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index 05bc070..7e4ec1e 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -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) ]) From 2680c8bde1aa274f25d7a434c645f16b3a1ee731 Mon Sep 17 00:00:00 2001 From: Chengyu HAN Date: Wed, 29 Jan 2025 15:59:39 +0800 Subject: [PATCH 11/11] testL update jldoctest --- src/JuliaSyntaxHighlighting.jl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/JuliaSyntaxHighlighting.jl b/src/JuliaSyntaxHighlighting.jl index d5fbd19..843f060 100644 --- a/src/JuliaSyntaxHighlighting.jl +++ b/src/JuliaSyntaxHighlighting.jl @@ -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)) ``` @@ -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)) ```