diff options
author | Evan Richter | 2023-12-19 23:31:27 +0000 |
---|---|---|
committer | GitHub | 2023-12-19 23:31:27 +0000 |
commit | a98b8ddd1a0337b7d4bf1b9722066685e5d3f16e (patch) | |
tree | 7e647d9c87e63bda28e7d3e3b8b4a308f2fa049a /runtime/queries | |
parent | 63218a512687cf6cfdbd11f088d0a2cb7d4dfcb8 (diff) |
add smali language support (#9089)
Diffstat (limited to 'runtime/queries')
-rw-r--r-- | runtime/queries/smali/folds.scm | 12 | ||||
-rw-r--r-- | runtime/queries/smali/highlights.scm | 216 | ||||
-rw-r--r-- | runtime/queries/smali/indents.scm | 31 | ||||
-rw-r--r-- | runtime/queries/smali/injections.scm | 2 | ||||
-rw-r--r-- | runtime/queries/smali/locals.scm | 42 |
5 files changed, 303 insertions, 0 deletions
diff --git a/runtime/queries/smali/folds.scm b/runtime/queries/smali/folds.scm new file mode 100644 index 00000000..c2062e5e --- /dev/null +++ b/runtime/queries/smali/folds.scm @@ -0,0 +1,12 @@ +[ + (annotation_directive) + (array_data_directive) + (field_definition) + (method_definition) + (packed_switch_directive) + (param_directive) + (parameter_directive) + (sparse_switch_directive) + (subannotation_directive) + (list) +] @fold diff --git a/runtime/queries/smali/highlights.scm b/runtime/queries/smali/highlights.scm new file mode 100644 index 00000000..f49dce0a --- /dev/null +++ b/runtime/queries/smali/highlights.scm @@ -0,0 +1,216 @@ +; Types + +(class_identifier + (identifier) @type) + +(primitive_type) @type.builtin + +((class_identifier + . (identifier) @_first @type.builtin + (identifier) @type.builtin) + (#match? @_first "^(android|dalvik|java|kotlinx)$")) + +((class_identifier + . (identifier) @_first @type.builtin + . (identifier) @_second @type.builtin + (identifier) @type.builtin) + (#eq? @_first "com") + (#match? @_second "^(android|google)$")) + +; Methods + +(method_definition + (method_signature (method_identifier) @function.method)) + +(expression + (opcode) @_invoke + (body + (full_method_signature + (method_signature (method_identifier) @function.method))) + (#match? @_invoke "^invoke")) + +(expression + (opcode) @_field_access + (body + (field_identifier) @variable.other.member) + (#match? @_field_access "^[is](get|put)-")) + +(method_handle + (full_method_signature + (method_signature (method_identifier) @function.method))) + +(custom_invoke + . (identifier) @function.method + (method_signature (method_identifier) @function.method)) + +(annotation_value + (body + (method_signature (method_identifier) @function.method))) + +(annotation_value + (body + (full_method_signature + (method_signature (method_identifier) @function.method)))) + +(field_definition + (body + (method_signature (method_identifier) @function.method))) + +(field_definition + (body + (full_method_signature + (method_signature (method_identifier) @function.method)))) + +((method_identifier) @constructor + (#match? @constructor "^(<init>|<clinit>)$")) + +"constructor" @constructor + +; Fields + +[ + (field_identifier) + (annotation_key) +] @variable.other.member + +((field_identifier) @constant + (#match? @constant "^[%u_]*$")) + +; Variables + +(variable) @variable.builtin + +(local_directive + (identifier) @variable) + +; Parameters + +(parameter) @variable.parameter +(param_identifier) @variable.parameter + +; Labels + +[ + (label) + (jmp_label) +] @label + +; Operators + +; (opcode) @keyword.operator + +((opcode) @keyword.control.return + (#match? @keyword.control.return "^return")) + +((opcode) @keyword.control.conditional + (#match? @keyword.control.conditional "^if")) + +((opcode) @keyword.control.conditional + (#match? @keyword.control.conditional "^cmp")) + +((opcode) @keyword.control.exception + (#match? @keyword.control.exception "^throw")) + +[ + "=" + ".." +] @operator + +; Keywords + +[ + ".class" + ".super" + ".implements" + ".field" + ".end field" + ".annotation" + ".end annotation" + ".subannotation" + ".end subannotation" + ".param" + ".end param" + ".parameter" + ".end parameter" + ".local" + ".end local" + ".restart local" + ".registers" + ".packed-switch" + ".end packed-switch" + ".sparse-switch" + ".end sparse-switch" + ".array-data" + ".end array-data" + ".enum" + (prologue_directive) + (epilogue_directive) +] @keyword + +[ + ".source" +] @keyword.directive + +[ + ".method" + ".end method" +] @keyword.function + +[ + ".catch" + ".catchall" +] @keyword.control.exception + +; Literals + +(string) @string +(source_directive (string "\"" _ @string.special.url "\"")) +(escape_sequence) @constant.character.escape + +(character) @constant.character + +"L" @punctuation + +(line_directive (number) @comment) @comment +(".locals" (number) @comment) @comment + +(number) @constant.numeric.integer + +[ + (float) + (NaN) + (Infinity) +] @constant.numeric.float + +(boolean) @constant.builtin.boolean + +(null) @constant.builtin + +; Misc + +(annotation_visibility) @keyword.storage.modifier + +(access_modifier) @keyword.storage.type + +(array_type + "[" @punctuation.special) + +["{" "}"] @punctuation.bracket + +["(" ")"] @punctuation.bracket + +[ + "->" + "," + ":" + ";" + "@" + "/" +] @punctuation.delimiter + +; Comments + +(comment) @comment + +(class_definition + (comment) @comment.block.documentation) diff --git a/runtime/queries/smali/indents.scm b/runtime/queries/smali/indents.scm new file mode 100644 index 00000000..8fad650a --- /dev/null +++ b/runtime/queries/smali/indents.scm @@ -0,0 +1,31 @@ +[ + (annotation_directive) + (array_data_directive) + (field_definition) + (method_definition) + (packed_switch_directive) + (param_directive) + (parameter_directive) + (sparse_switch_directive) + (subannotation_directive) + (list) + "\{" +] @indent + +[ + ".end annotation" + ".end array-data" + ".end field" + ".end method" + ".end packed-switch" + ".end param" + ".end parameter" + ".end sparse-switch" + ".end subannotation" + "\}" +] @outdent + +[ + (ERROR) + (comment) +] @indent.always diff --git a/runtime/queries/smali/injections.scm b/runtime/queries/smali/injections.scm new file mode 100644 index 00000000..321c90ad --- /dev/null +++ b/runtime/queries/smali/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/runtime/queries/smali/locals.scm b/runtime/queries/smali/locals.scm new file mode 100644 index 00000000..34369490 --- /dev/null +++ b/runtime/queries/smali/locals.scm @@ -0,0 +1,42 @@ +[ + (class_directive) + (expression) + (annotation_directive) + (array_data_directive) + (method_definition) + (packed_switch_directive) + (sparse_switch_directive) + (subannotation_directive) +] @local.scope + +[ + (identifier) + (class_identifier) + (label) + (jmp_label) +] @local.reference + +(enum_reference + (field_identifier) @local.definition) + +((field_definition + (access_modifiers) @_mod + (field_identifier) @local.definition) + (#eq? @_mod "enum")) + +(field_definition + (field_identifier) @local.definition + (field_type) @local.definition) + +(annotation_key) @local.definition + +(method_definition + (method_signature (method_identifier) @local.definition)) + +(param_identifier) @local.definition + +(annotation_directive + (class_identifier) @local.definition) + +(class_directive + (class_identifier) @local.definition) |