forked from helix-editor/helix
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add language support for ponylang (helix-editor#5416)
- Loading branch information
Showing
6 changed files
with
323 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,176 @@ | ||
[ | ||
(line_comment) | ||
(block_comment) | ||
] @comment | ||
|
||
(bool) @constant.builtin.boolean | ||
(integer) @constant.numeric.integer | ||
(float) @constant.numeric.float | ||
(character) @constant.character | ||
|
||
;; strings and docstring | ||
(source_file docstring: (string) @string.special) | ||
(entity docstring: (string) @string.special) | ||
(method docstring: (string) @string.special) ; docstring for methods without body | ||
(behavior docstring: (string) @string.special) ; docstring for methods without body | ||
(constructor docstring: (string) @string.special) ; docstring for methods without body | ||
(method body: (block . (string) @string.special)) ; docstring for methods with body | ||
(behavior body: (block . (string) @string.special)) | ||
(constructor body: (block . (string) @string.special)) | ||
(field docstring: (string) @string.special) | ||
(string) @string | ||
|
||
;; Punctuation | ||
[ | ||
"(" | ||
")" | ||
"{" | ||
"}" | ||
"[" | ||
"]" | ||
] @punctuation.bracket | ||
[ | ||
";" | ||
"." | ||
"," | ||
] @punctuation.delimiter | ||
|
||
(this) @variable.builtin | ||
|
||
(field name: (identifier) @variable.other.member) | ||
|
||
"use" @keyword.control.import | ||
[ | ||
"for" | ||
"in" | ||
"while" | ||
"do" | ||
"repeat" | ||
"until" | ||
] @keyword.control.repeat | ||
[ | ||
"if" | ||
"ifdef" | ||
"iftype" | ||
"then" | ||
"elseif" | ||
"else" | ||
"match" | ||
] @keyword.control.conditional | ||
[ | ||
"break" | ||
"continue" | ||
"return" | ||
"error" | ||
"compile_error" | ||
"compile_intrinsic" | ||
] @keyword.control.return | ||
[ | ||
"recover" | ||
"consume" | ||
"end" | ||
"try" | ||
"with" | ||
] @keyword.control | ||
|
||
[ | ||
"as" | ||
"is" | ||
"isnt" | ||
"not" | ||
"and" | ||
"or" | ||
"xor" | ||
"digestof" | ||
"addressof" | ||
(location) | ||
] @keyword.operator | ||
|
||
(entity_type) @keyword.storage.type | ||
|
||
[ | ||
"var" | ||
"let" | ||
"embed" | ||
] @keyword.storage | ||
|
||
[ | ||
"fun" | ||
"be" | ||
"new" | ||
] @keyword.function | ||
|
||
[ | ||
(cap) | ||
(gencap) | ||
"where" | ||
] @keyword | ||
|
||
[ | ||
(partial) | ||
"=>" | ||
"~" | ||
".>" | ||
"+" | ||
"-" | ||
"*" | ||
"/" | ||
"%" | ||
"%%" | ||
"+~" | ||
"-~" | ||
"/~" | ||
"*~" | ||
"%~" | ||
"%%~" | ||
|
||
">>" | ||
"<<" | ||
">>~" | ||
"<<~" | ||
|
||
"==" | ||
"!=" | ||
">" | ||
"<" | ||
">=" | ||
"<=" | ||
] @operator | ||
|
||
;; Types | ||
(entity name: (identifier) @type) | ||
(nominal_type name: (identifier) @type) | ||
(typeparams (typeparam name: (identifier) @type)) | ||
|
||
;; constructors / methods / behaviors | ||
(constructor name: (identifier) @constructor) | ||
(method name: (identifier) @function.method) | ||
(behavior name: (identifier) @function.method) | ||
|
||
;; method calls | ||
; TODO: be more specific about what is the actual function reference | ||
(call callee: (field_access field: (identifier) @function.method)) | ||
(call callee: (_) @function.method) | ||
(ffi_call name: (_) @function) | ||
(partial_application function: (identifier) @function.method) | ||
(chain function: (identifier) @function.method) | ||
|
||
;; fields and params | ||
(field name: (identifier) @variable.other.member) | ||
(param (identifier) @variable.parameter) | ||
(lambdaparam (identifier) @variable.parameter) | ||
|
||
;; this.field is considered a member access | ||
(field_access base: (this) field: (identifier) @variable.other.member) | ||
|
||
;; annotations | ||
(annotations (identifier) @attribute) | ||
|
||
;; variables | ||
;; references to upper case things are considered constructors | ||
( | ||
(identifier) @constructor | ||
(#match @constructor "^[A-Z]") | ||
) | ||
(identifier) @variable | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
; queries for helix to do automatic indentation upon hitting enter | ||
; TODO: needs more work, cover more cases | ||
[ | ||
(entity) | ||
(method) | ||
(behavior) | ||
(constructor) | ||
(block) | ||
(tuple) | ||
(grouped) | ||
] @indent | ||
(match_case body: (block) @indent) | ||
; ffi_call and call | ||
(_ arguments: (_) @indent) | ||
(assignment right: (_) @indent | ||
(#set! "scope" "all") | ||
) | ||
|
||
[ | ||
(params) | ||
(object) | ||
("if") | ||
] @extend | ||
(lambda params: (_) @extend) | ||
|
||
[ | ||
"end" | ||
"}" | ||
"]" | ||
")" | ||
"|" | ||
] @outdent |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
[ | ||
(entity) | ||
(method) | ||
(behavior) | ||
(constructor) | ||
("if") | ||
(elseif) | ||
(ifdef) | ||
(elseifdef) | ||
(iftype) | ||
(elseiftype) | ||
(match) | ||
(match_case) | ||
("while") | ||
("repeat") | ||
("for") | ||
(lambda) | ||
(try_block) | ||
(with) | ||
] @local.scope | ||
(match else_block: (block) @local.scope) | ||
(try_block else_block: (block) @local.scope) | ||
(try_block then_block: (block) @local.scope) | ||
(with else_block: (block) @local.scope) | ||
|
||
(field name: (identifier) @local.definition) | ||
(local name: (identifier) @local.definition) | ||
(param name: (identifier) @local.definition) | ||
(lambdaparam name: (identifier) @local.definition) | ||
("for" element: (idseq (identifier) @local.definition)) | ||
(withelem name: (idseq (identifier) @local.definition)) | ||
|
||
; only lower case identifiers are references | ||
( | ||
(identifier) @local.reference | ||
(#match? @local.reference "^[a-z_][a-zA-Z_]*") | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
;; Queries for helix to select textobjects: https://docs.helix-editor.com/usage.html#textobjects | ||
;; function.inside | ||
;; function.around | ||
;; class.inside | ||
;; class.around | ||
;; test.inside | ||
;; test.around | ||
;; parameter.inside | ||
;; comment.inside | ||
;; comment.around | ||
|
||
;; Queries for navigating using textobjects | ||
|
||
[ | ||
(line_comment) | ||
(block_comment) | ||
] @comment.inside | ||
|
||
(line_comment)+ @comment.around | ||
(block_comment) @comment.around | ||
|
||
(entity members: (members)? @class.inside) @class.around | ||
(object members: (members)? @class.inside) @class.around | ||
|
||
(method | ||
body: (block)? @function.inside | ||
) @function.around | ||
(behavior | ||
body: (block)? @function.inside | ||
) @function.around | ||
(constructor | ||
body: (block)? @function.inside | ||
) @function.around | ||
(lambda | ||
body: (block)? @function.inside | ||
) @function.outside | ||
|
||
(params | ||
((_) @parameter.inside . ","? @parameter.around) @parameter.around | ||
) | ||
(lambda | ||
params: ((_) @parameter.inside . ","? @parameter.around) @parameter.around | ||
) | ||
(typeargs | ||
((_) @parameter.inside . ","? @parameter.around) @parameter.around | ||
) | ||
(typeparams | ||
((_) @parameter.inside . ","? @parameter.around) @parameter.around | ||
) | ||
(arguments | ||
positional: (positional_args | ||
((_) @parameter.inside . ","? @parameter.around)? @parameter.around) | ||
; TODO: get named args right | ||
named: (named_args ((_) @parameter.inside . ","? @parameter.around)? @parameter.around) | ||
) | ||
|
||
( | ||
(entity | ||
provides: (type (nominal_type name: (identifier) @_provides)) | ||
members: (members) @test.inside | ||
) @test.outside | ||
(#eq? @_provides "UnitTest") | ||
) | ||
|