aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/foam
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/queries/foam')
-rw-r--r--runtime/queries/foam/folds.scm8
-rw-r--r--runtime/queries/foam/highlights.scm64
-rw-r--r--runtime/queries/foam/indents.scm11
-rw-r--r--runtime/queries/foam/injections.scm23
-rw-r--r--runtime/queries/foam/locals.scm11
5 files changed, 117 insertions, 0 deletions
diff --git a/runtime/queries/foam/folds.scm b/runtime/queries/foam/folds.scm
new file mode 100644
index 000000000..e05d0dbaa
--- /dev/null
+++ b/runtime/queries/foam/folds.scm
@@ -0,0 +1,8 @@
+[
+ (comment)
+ (list)
+ (dict_core)
+] @fold
+
+(code
+ (code_body)* @fold)
diff --git a/runtime/queries/foam/highlights.scm b/runtime/queries/foam/highlights.scm
new file mode 100644
index 000000000..9c96f196e
--- /dev/null
+++ b/runtime/queries/foam/highlights.scm
@@ -0,0 +1,64 @@
+; Comments
+(comment) @comment @spell
+
+; Generic Key-value pairs and dictionary keywords
+(key_value
+ keyword: (identifier) @function)
+
+(dict
+ key: (identifier) @type)
+
+; Macros
+(macro
+ "$" @keyword.conditional
+ (prev_scope)* @keyword.conditional
+ (identifier)* @module)
+
+; Directives
+"#" @keyword.conditional
+
+(preproc_call
+ directive: (identifier)* @keyword.conditional
+ argument: (identifier)* @module)
+
+((preproc_call
+ argument: (identifier)* @module) @keyword.conditional
+ (#eq? @keyword.conditional "ifeq"))
+
+((preproc_call) @keyword.conditional
+ (#any-of? @keyword.conditional "else" "endif"))
+
+; Literals
+(number_literal) @number.float
+
+(string_literal) @string
+
+(escape_sequence) @string.escape
+
+(boolean) @boolean
+
+; Treat [m^2 s^-2] the same as if it was put in numbers format
+(dimensions
+ dimension: (identifier) @number.float)
+
+; Punctuation
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+ "#{"
+ "#}"
+ "|-"
+ "-|"
+ "<!--("
+ ")-->"
+ "$$"
+] @punctuation.bracket
+
+";" @punctuation.delimiter
+
+((identifier) @constant.builtin
+ (#any-of? @constant.builtin "uniform" "non-uniform" "and" "or"))
diff --git a/runtime/queries/foam/indents.scm b/runtime/queries/foam/indents.scm
new file mode 100644
index 000000000..be02b80ed
--- /dev/null
+++ b/runtime/queries/foam/indents.scm
@@ -0,0 +1,11 @@
+[
+ "{"
+ "}"
+] @indent.branch
+
+[
+ (dict)
+ (key_value)
+] @indent.begin
+
+(comment) @indent.ignore
diff --git a/runtime/queries/foam/injections.scm b/runtime/queries/foam/injections.scm
new file mode 100644
index 000000000..b9f8f838f
--- /dev/null
+++ b/runtime/queries/foam/injections.scm
@@ -0,0 +1,23 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
+
+; Pass code blocks to Cpp highlighter
+(code
+ (code_body) @injection.content
+ (#set! injection.language "cpp"))
+
+; Pass identifiers to Go highlighter (Cheating I know)
+; ((identifier) @injection.content
+; (#set! injection.language "lua")
+; Highlight regex syntax inside literal strings
+((string_literal) @injection.content
+ (#set! injection.language "regex"))
+
+; Highlight PyFoam syntax as Python statements
+(pyfoam_variable
+ code_body: (_) @injection.content
+ (#set! injection.language "python"))
+
+(pyfoam_expression
+ code_body: (_) @injection.content
+ (#set! injection.language "python"))
diff --git a/runtime/queries/foam/locals.scm b/runtime/queries/foam/locals.scm
new file mode 100644
index 000000000..f3f689081
--- /dev/null
+++ b/runtime/queries/foam/locals.scm
@@ -0,0 +1,11 @@
+(dict) @local.scope
+
+(dict
+ key: (_) @local.definition.type)
+
+(key_value
+ keyword: (_) @local.definition.parameter)
+
+(key_value
+ value: (macro
+ (identifier)*)* @local.reference)