Julia Syntax Highlighting

JuliaSyntaxHighlightingライブラリは、JuliaSyntaxStyledStringsを使用してJuliaコードの構文をハイライトするための小さな便利パッケージです。

標準ライブラリおよびより広いエコシステムでの使用を意図しています。

Functions

JuliaSyntaxHighlighting.highlightFunction
highlight(content::Union{AbstractString, IO},
          ast::JuliaSyntax.GreenNode = <parsed content>;
          syntax_errors::Bool = false) -> AnnotatedString{String}

content に対して JuliaSyntax を使用して構文ハイライトを適用します。

デフォルトでは、JuliaSyntax.parseall が使用され、ignore_errors キーワード引数が true に設定されて ast が生成されます。あるいは、事前に生成された ast を提供することもできます。

syntax_errors が設定されている場合、検出された構文エラーには julia_error フェイスが適用されます。

Warning

JuliaSyntax によって使用される特定のフェイスと、それらの適用方法は変更される可能性があります。

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))
source
JuliaSyntaxHighlighting.highlight!Function
highlight!(content::Union{AnnotatedString, SubString{AnnotatedString}},
           ast::JuliaSyntax.GreenNode = <parsed content>;
           syntax_errors::Bool = false) -> content

contentJuliaSyntaxを使用して構文ハイライトを適用することで修正します。

デフォルトでは、JuliaSyntax.parseallが使用され、ignore_errorsキーワード引数がtrueに設定されてastが生成されます。あるいは、事前に生成されたastを提供することもできます。

syntax_errorsが設定されている場合、検出された構文エラーにはjulia_errorフェイスが適用されます。

Warning

JuliaSyntaxによって使用される特定のフェイスと、それらの適用方法は変更される可能性があることに注意してください。

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))
source

Faces

highlight/highlight! メソッドは、Julia コードにカスタムフェイスを適用することによって機能します。標準ライブラリの一部として、これらのフェイスは julia_* という形式の特権フェイス名を使用します。これらは他のパッケージで再利用でき、faces.toml 設定でカスタマイズできます。

Unstable faces

JuliaSyntaxHighlightingで使用される特定の顔は、ポイントリリースで予告なしに変更される可能性があります。構文ハイライトのルールが時間とともに洗練されるにつれて、変更は次第に少なくなるはずです。

現在の顔のセットとそのデフォルト値は次のとおりです:

  • julia_macro: マゼンタ
  • julia_symbol: マゼンタ
  • julia_singleton_identifier: julia_symbolから継承します。
  • julia_type: 黄色
  • julia_typedec: 明るい青
  • julia_comment: グレー
  • julia_string: 緑
  • julia_regex: julia_stringから継承します。
  • julia_backslash_literal: マゼンタ、julia_string から継承されます
  • julia_string_delim: 明るい緑
  • julia_cmdstring: julia_stringから継承します。
  • julia_char: julia_stringから継承します。
  • julia_char_delim: julia_string_delim から継承します。
  • julia_number: 明るいマゼンタ
  • julia_bool: julia_number から継承されます。
  • julia_funcall: シアン
  • julia_broadcast: 明るい青、太字
  • julia_builtin: 明るい青
  • julia_operator: 青
  • julia_comparator: julia_operatorから継承します。
  • julia_assignment: 明るい赤
  • julia_keyword: 赤
  • julia_parentheses: スタイルなし
  • julia_unpaired_parentheses: julia_errorjulia_parentheses から継承します。
  • julia_error: 赤い背景
  • julia_rainbow_paren_1: 明るい緑、julia_parenthesesから継承
  • julia_rainbow_paren_2: 明るい青、julia_parenthesesから継承
  • julia_rainbow_paren_3: 明るい赤、julia_parenthesesから継承されます
  • julia_rainbow_paren_4: julia_rainbow_paren_1 から継承しています。
  • julia_rainbow_paren_5: julia_rainbow_paren_2 から継承しています。
  • julia_rainbow_paren_6: julia_rainbow_paren_3 から継承しています。
  • julia_rainbow_bracket_1: 青, julia_parentheses から継承されます
  • julia_rainbow_bracket_2: 明るいマゼンタ、`juliaparentheses`から継承
  • julia_rainbow_bracket_3: julia_rainbow_bracket_1 から継承しています。
  • julia_rainbow_bracket_4: julia_rainbow_bracket_2から継承しています。
  • julia_rainbow_bracket_5: julia_rainbow_bracket_1 から継承しています。
  • julia_rainbow_bracket_6: julia_rainbow_bracket_2から継承しています。
  • julia_rainbow_curly_1: 明るい黄色、julia_parentheses から継承されます
  • julia_rainbow_curly_2: 黄色、julia_parenthesesから継承しています。
  • julia_rainbow_curly_3: julia_rainbow_curly_1 から継承しています。
  • julia_rainbow_curly_4: julia_rainbow_curly_2 から継承しています。
  • julia_rainbow_curly_5: julia_rainbow_curly_1 から継承しています。
  • julia_rainbow_curly_6: julia_rainbow_curly_2 から継承しています。