add new highlights for elm, jsx and fix tsx highlights

Signed-off-by: Suraj Ghimire <suraj@ghishadow.com>
This commit is contained in:
Suraj Ghimire 2022-09-19 05:48:50 +05:30
parent 7867f5050e
commit 3da104b731
No known key found for this signature in database
GPG Key ID: 1263B04589021BE8
3 changed files with 341 additions and 3 deletions

View File

@ -0,0 +1,88 @@
; source: https://github.com/helix-editor/helix/blob/master/runtime/queries/elm/highlights.scm
; licence: https://github.com/helix-editor/helix/blob/master/LICENSE
; spdx: MPL-2.0
; Keywords
[
"if"
"then"
"else"
"let"
"in"
] @keyword.control
(case) @keyword.control
(of) @keyword.control
(colon) @keyword.operator
(backslash) @keyword
(as) @keyword
(port) @keyword
(exposing) @keyword
(alias) @keyword
(infix) @keyword
(arrow) @keyword.operator
(dot) @keyword.operator
(port) @keyword
(type_annotation(lower_case_identifier) @function)
(port_annotation(lower_case_identifier) @function)
(file (value_declaration (function_declaration_left(lower_case_identifier) @function)))
(field name: (lower_case_identifier) @attribute)
(field_access_expr(lower_case_identifier) @attribute)
(operator_identifier) @keyword.operator
(eq) @keyword.operator.assignment
[
"("
")"
"["
"]"
"{"
"}"
] @punctuation.bracket
"|" @keyword
"," @punctuation.delimiter
[
"|>"
] @keyword
(import) @keyword.control.import
(module) @keyword.other
(number_constant_expr) @constant.numeric
(type) @type
(type_declaration(upper_case_identifier) @type)
(type_ref) @type
(type_alias_declaration name: (upper_case_identifier) @type)
(union_pattern constructor: (upper_case_qid (upper_case_identifier) @label (dot) (upper_case_identifier) @variable.other.member))
(union_pattern constructor: (upper_case_qid (upper_case_identifier) @variable.other.member))
(union_variant(upper_case_identifier) @variable.other.member)
(value_expr name: (value_qid (upper_case_identifier) @label))
(value_expr (upper_case_qid (upper_case_identifier) @label (dot) (upper_case_identifier) @variable.other.member))
(value_expr(upper_case_qid(upper_case_identifier)) @variable.other.member)
; comments
(line_comment) @comment
(block_comment) @comment
; strings
(string_escape) @constant.character.escape
(open_quote) @string
(close_quote) @string
(regular_string_part) @string
(open_char) @constant.character
(close_char) @constant.character

View File

@ -0,0 +1,250 @@
; source: https://github.com/helix-editor/helix/blob/master/runtime/queries/jsx/highlights.scm
; licence: https://github.com/helix-editor/helix/blob/master/LICENSE
; spdx: MPL-2.0
; Special identifiers
;--------------------
([
(identifier)
(shorthand_property_identifier)
(shorthand_property_identifier_pattern)
] @constant
(#match? @constant "^[A-Z_][A-Z\\d_]+$"))
((identifier) @constructor
(#match? @constructor "^[A-Z]"))
((identifier) @variable.builtin
(#match? @variable.builtin "^(arguments|module|console|window|document)$")
(#is-not? local))
((identifier) @function.builtin
(#eq? @function.builtin "require")
(#is-not? local))
; Function and method definitions
;--------------------------------
(function
name: (identifier) @function)
(function_declaration
name: (identifier) @function)
(method_definition
name: (property_identifier) @function.method)
(pair
key: (property_identifier) @function.method
value: [(function) (arrow_function)])
(assignment_expression
left: (member_expression
property: (property_identifier) @function.method)
right: [(function) (arrow_function)])
(variable_declarator
name: (identifier) @function
value: [(function) (arrow_function)])
(assignment_expression
left: (identifier) @function
right: [(function) (arrow_function)])
; Function and method calls
;--------------------------
(call_expression
function: (identifier) @function)
(call_expression
function: (member_expression
property: (property_identifier) @function.method))
; Variables
;----------
(identifier) @variable
; Properties
;-----------
(property_identifier) @variable.other.member
(shorthand_property_identifier) @variable.other.member
(shorthand_property_identifier_pattern) @variable.other.member
; Literals
;---------
(this) @variable.builtin
(super) @variable.builtin
[
(true)
(false)
(null)
(undefined)
] @constant.builtin
(comment) @comment
[
(string)
(template_string)
] @string
(regex) @string.regexp
(number) @constant.numeric.integer
; Tokens
;-------
(template_substitution
"${" @punctuation.special
"}" @punctuation.special) @embedded
[
";"
"?."
"."
","
] @punctuation.delimiter
[
"-"
"--"
"-="
"+"
"++"
"+="
"*"
"*="
"**"
"**="
"/"
"/="
"%"
"%="
"<"
"<="
"<<"
"<<="
"="
"=="
"==="
"!"
"!="
"!=="
"=>"
">"
">="
">>"
">>="
">>>"
">>>="
"~"
"^"
"&"
"|"
"^="
"&="
"|="
"&&"
"||"
"??"
"&&="
"||="
"??="
"..."
] @operator
(ternary_expression ["?" ":"] @operator)
[
"("
")"
"["
"]"
"{"
"}"
] @punctuation.bracket
[
"as"
"async"
"debugger"
"delete"
"extends"
"from"
"function"
"get"
"in"
"instanceof"
"new"
"of"
"set"
"static"
"target"
"try"
"typeof"
"void"
"with"
] @keyword
[
"class"
"let"
"const"
"var"
] @keyword.storage.type
[
"switch"
"case"
"default"
"if"
"else"
"yield"
"throw"
"finally"
"return"
"catch"
"continue"
"while"
"break"
"for"
"do"
"await"
] @keyword.control
[
"import"
"export"
] @keyword.control.import
; Highlight component names differently
(jsx_opening_element ((identifier) @constructor
(#match? @constructor "^[A-Z]")))
; Handle the dot operator effectively - <My.Component>
(jsx_opening_element ((nested_identifier (identifier) @tag (identifier) @constructor)))
(jsx_closing_element ((identifier) @constructor
(#match? @constructor "^[A-Z]")))
; Handle the dot operator effectively - </My.Component>
(jsx_closing_element ((nested_identifier (identifier) @tag (identifier) @constructor)))
(jsx_self_closing_element ((identifier) @constructor
(#match? @constructor "^[A-Z]")))
; Handle the dot operator effectively - <My.Component />
(jsx_self_closing_element ((nested_identifier (identifier) @tag (identifier) @constructor)))
; TODO: also tag @punctuation.delimiter?
(jsx_opening_element (identifier) @tag)
(jsx_closing_element (identifier) @tag)
(jsx_self_closing_element (identifier) @tag)
(jsx_attribute (property_identifier) @variable.other.member)

View File

@ -249,7 +249,7 @@ pub enum LapceLanguage {
SyntaxProperties {
id: LapceLanguage::Jsx,
language: tree_sitter_javascript::language,
highlight: tree_sitter_javascript::JSX_HIGHLIGHT_QUERY,
highlight: include_str!("../queries/jsx/highlights.scm"),
// TODO: Does jsx use the javascript injection query too?
injection: Some(tree_sitter_javascript::INJECTION_QUERY),
comment: "//",
@ -274,7 +274,7 @@ pub enum LapceLanguage {
SyntaxProperties {
id: LapceLanguage::Tsx,
language: tree_sitter_typescript::language_tsx,
highlight: tree_sitter_typescript::HIGHLIGHT_QUERY,
highlight: include_str!("../queries/typescript/highlights.scm"),
injection: None,
comment: "//",
indent: " ",
@ -442,7 +442,7 @@ pub enum LapceLanguage {
SyntaxProperties {
id: LapceLanguage::Elm,
language: tree_sitter_elm::language,
highlight: tree_sitter_elm::HIGHLIGHTS_QUERY,
highlight: include_str!("../queries/elm/highlights.scm"),
injection: Some(tree_sitter_elm::INJECTIONS_QUERY),
comment: "#",
indent: " ",