Julia Syntax Highlighting
The JuliaSyntaxHighlighting library serves as a small convenience package to syntax highlight Julia code using JuliaSyntax and StyledStrings.
It is intended for use across the standard library, and the wider ecosystem.
Functions
#
JuliaSyntaxHighlighting.highlight — Function
highlight(content::Union{AbstractString, IO},
ast::JuliaSyntax.GreenNode = <parsed content>;
syntax_errors::Bool = false) -> AnnotatedString{String}
Apply syntax highlighting to content using JuliaSyntax.
By default, JuliaSyntax.parseall is used to generate to ast with the ignore_errors keyword argument set to true. Alternatively, one may provide a pre-generated ast.
When syntax_errors is set, the julia_error face is applied to detected syntax errors.
|
Warning Note that the particular faces used by |
Examples
julia> JuliaSyntaxHighlighting.highlight("sum(1:8)")
"sum(1:8)"
julia> JuliaSyntaxHighlighting.highlight("sum(1:8)") |> Base.annotations
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}((7:7, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((8:8, :face, :julia_rainbow_paren_1))
#
JuliaSyntaxHighlighting.highlight! — Function
highlight!(content::Union{AnnotatedString, SubString{AnnotatedString}},
ast::JuliaSyntax.GreenNode = <parsed content>;
syntax_errors::Bool = false) -> content
Modify content by applying syntax highlighting using JuliaSyntax.
By default, JuliaSyntax.parseall is used to generate to ast with the ignore_errors keyword argument set to true. Alternatively, one may provide a pre-generated ast.
When syntax_errors is set, the julia_error face is applied to detected syntax errors.
|
Warning Note that the particular faces used by |
Examples
julia> str = Base.AnnotatedString("sum(1:8)")
"sum(1:8)"
julia> JuliaSyntaxHighlighting.highlight!(str)
"sum(1:8)"
julia> Base.annotations(str)
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}((7:7, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((8:8, :face, :julia_rainbow_paren_1))
Faces
The highlight/highlight! methods work by applying custom faces to Julia code. As part of the standard library, these faces use privileged face names, of the form julia_*. These can be re-used in other packages, and customised with faces.toml configuration.
|
Unstable faces The particular faces used by |
The current set of faces, and their default values are as follows:
-
julia_macro: magenta -
julia_symbol: magenta -
julia_singleton_identifier: inherits fromjulia_symbol -
julia_type: yellow -
julia_typedec: bright blue -
julia_comment: grey -
julia_string: green -
julia_regex: inherits fromjulia_string -
julia_backslash_literal: magenta, inherits fromjulia_string -
julia_string_delim: bright green -
julia_cmdstring: inherits fromjulia_string -
julia_char: inherits fromjulia_string -
julia_char_delim: inherits fromjulia_string_delim -
julia_number: bright magenta -
julia_bool: inherits fromjulia_number -
julia_funcall: cyan -
julia_broadcast: bright blue, bold -
julia_builtin: bright blue -
julia_operator: blue -
julia_comparator: inherits fromjulia_operator -
julia_assignment: bright red -
julia_keyword: red -
julia_parentheses: unstyled -
julia_unpaired_parentheses: inherit fromjulia_errorandjulia_parentheses -
julia_error: red background -
julia_rainbow_paren_1: bright green, inherits fromjulia_parentheses -
julia_rainbow_paren_2: bright blue, inherits fromjulia_parentheses -
julia_rainbow_paren_3: bright red, inherits fromjulia_parentheses -
julia_rainbow_paren_4: inherits fromjulia_rainbow_paren_1 -
julia_rainbow_paren_5: inherits fromjulia_rainbow_paren_2 -
julia_rainbow_paren_6: inherits fromjulia_rainbow_paren_3 -
julia_rainbow_bracket_1: blue, inherits fromjulia_parentheses -
julia_rainbow_bracket_2: bright_magenta, inherits fromjulia_parentheses -
julia_rainbow_bracket_3: inherits fromjulia_rainbow_bracket_1 -
julia_rainbow_bracket_4: inherits fromjulia_rainbow_bracket_2 -
julia_rainbow_bracket_5: inherits fromjulia_rainbow_bracket_1 -
julia_rainbow_bracket_6: inherits fromjulia_rainbow_bracket_2 -
julia_rainbow_curly_1: bright yellow, inherits fromjulia_parentheses -
julia_rainbow_curly_2: yellow, inherits fromjulia_parentheses -
julia_rainbow_curly_3: inherits fromjulia_rainbow_curly_1 -
julia_rainbow_curly_4: inherits fromjulia_rainbow_curly_2 -
julia_rainbow_curly_5: inherits fromjulia_rainbow_curly_1 -
julia_rainbow_curly_6: inherits fromjulia_rainbow_curly_2