Add OpenFOAM parser

This commit is contained in:
Elwardi 2021-12-14 13:45:56 +01:00 committed by Stephan Seitz
parent 50fee51d35
commit 16e77495c4
9 changed files with 131 additions and 0 deletions

View file

@ -178,6 +178,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [erlang](https://github.com/AbstractMachinesLab/tree-sitter-erlang) (maintained by @ostera)
- [x] [fennel](https://github.com/travonted/tree-sitter-fennel) (maintained by @TravonteD)
- [x] [fish](https://github.com/ram02z/tree-sitter-fish) (maintained by @ram02z)
- [x] [foam](https://github.com/FoamScience/tree-sitter-foam) (maintained by @FoamScience)
- [ ] [fortran](https://github.com/stadelmanma/tree-sitter-fortran)
- [x] [fusion](https://gitlab.com/jirgn/tree-sitter-fusion.git) (maintained by @jirgn)
- [x] [Godot (gdscript)](https://github.com/PrestonKnopp/tree-sitter-gdscript) (maintained by @Shatur95)

13
after/ftdetect/foam.vim Normal file
View file

@ -0,0 +1,13 @@
" Last Change: 2021 Dec 13
function! s:foamFile(path)
let l:lines = getline(1, 10)
for line in lines
if match(line, 'FoamFile') >= 0
set filetype=foam
endif
endfor
endfunction
autocmd BufNewFile,BufRead * call s:foamFile(expand("%"))
autocmd FileType cpp call s:foamFile(expand("%"))

View file

@ -846,6 +846,21 @@ list.rasi = {
maintainers = { "@Fymyte" },
}
list.foam = {
install_info = {
url = "https://github.com/FoamScience/tree-sitter-foam",
branch = "master",
files = {"src/parser.c", "src/scanner.cc"},
generate_requires_npm = true,
},
maintainers = { "@FoamScience" },
filetype = "foam",
used_by = {"OpenFOAM"},
-- Queries might change over time on the grammar's side
-- Otherwise everything runs fine
experimental = true,
}
local M = {
list = list,
}

7
queries/foam/folds.scm Normal file
View file

@ -0,0 +1,7 @@
[
(comment)
(list)
(dict_core)
] @fold
(code (code_body)* @fold)

View file

@ -0,0 +1,61 @@
;; Comments
(comment) @comment
;; Generic Key-value pairs and dictionary keywords
(key_value
keyword: (identifier) @function
)
(dict
key: (identifier) @type
)
;; Macros
(macro
"$" @conditional
(prev_scope)* @conditional
(identifier)* @namespace
)
;; Directives
"#" @conditional
(preproc_call
directive: (identifier)* @conditional
argument: (identifier)* @namespace
)
(
(preproc_call
argument: (identifier)* @namespace
) @conditional
(#match? @conditional "ifeq")
)
(
(preproc_call) @conditional
(#match? @conditional "(else|endif)")
)
;; Literal numbers and strings
(number_literal) @float
(string_literal) @string
(escape_sequence) @escape
;; Treat [m^2 s^-2] the same as if it was put in numbers format
(dimensions dimension: (identifier) @float)
;; Punctuation
[
"("
")"
"["
"]"
"{"
"}"
"#{"
"#}"
";"
] @punctuation
;; Special identifiers
([(identifier) "on" "off" "true" "false" "yes" "no"] @attribute
(#match? @attribute "^(uniform|non-uniform|and|or|on|off|true|false|yes|no)$")
)

11
queries/foam/indents.scm Normal file
View file

@ -0,0 +1,11 @@
[
"{"
"}"
] @branch
[(dict) (key_value)] @indent
[
(comment)
] @ignore

View file

@ -0,0 +1,9 @@
;; Pass code blocks to Cpp highlighter
(code (code_body) @cpp)
;; Pass identifiers to Go highlighter (Cheating I know)
;;((identifier) @lua)
;; Highlight regex syntax inside literal strings
((string_literal) @regex)

6
queries/foam/locals.scm Normal file
View file

@ -0,0 +1,6 @@
(dict) @scope
(dict key: (_) @definition.type)
(key_value keyword: (_) @definition.parameter)
(key_value value: (macro (identifier)*)* @reference)

View file

@ -0,0 +1,8 @@
(dict) @class.outer
((dict_core) @class.inner)
((key_value value: _? @_start (_)* _? @parameter.inner)
(#make-range! "function.inner" @_start @parameter.inner)) @function.outer
(code (_)* @class.inner) @class.outer
((comment) @_start ((comment)+) @_end
(#make-range! "comment.outer" @_start @_end))
(comment) @comment.inner