aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorath32022-08-24 16:58:15 +0000
committerGitHub2022-08-24 16:58:15 +0000
commit45add73fb1d2c4f2b0c544117c2d83b7081a2a4a (patch)
tree795d28d0d078917051383ae66250076596393320
parentfacde9f18c03dd8061199215af5a010903daaedb (diff)
AWK support (#3528)
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml14
-rw-r--r--runtime/queries/awk/highlights.scm122
-rw-r--r--runtime/queries/awk/injections.scm2
-rw-r--r--runtime/queries/awk/textobjects.scm10
-rw-r--r--runtime/queries/bash/injections.scm6
6 files changed, 155 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 12a42931..8c1d8208 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -1,5 +1,6 @@
| Language | Syntax Highlighting | Treesitter Textobjects | Auto Indent | Default LSP |
| --- | --- | --- | --- | --- |
+| awk | ✓ | ✓ | | `awk-language-server` |
| bash | ✓ | | | `bash-language-server` |
| beancount | ✓ | | | |
| c | ✓ | ✓ | ✓ | `clangd` |
diff --git a/languages.toml b/languages.toml
index 38af1310..bac2c8d0 100644
--- a/languages.toml
+++ b/languages.toml
@@ -67,6 +67,20 @@ name = "toml"
source = { git = "https://github.com/ikatyang/tree-sitter-toml", rev = "7cff70bbcbbc62001b465603ca1ea88edd668704" }
[[language]]
+name = "awk"
+scope = "source.awk"
+injection-regex = "awk"
+file-types = ["awk", "gawk", "nawk", "mawk"]
+roots = []
+comment-token = "#"
+language-server = { command = "awk-language-server" }
+indent = { tab-width = 2, unit = " " }
+
+[[grammar]]
+name = "awk"
+source = { git = "https://github.com/Beaglefoot/tree-sitter-awk", rev = "a799bc5da7c2a84bc9a06ba5f3540cf1191e4ee3" }
+
+[[language]]
name = "protobuf"
scope = "source.proto"
injection-regex = "protobuf"
diff --git a/runtime/queries/awk/highlights.scm b/runtime/queries/awk/highlights.scm
new file mode 100644
index 00000000..34d660ad
--- /dev/null
+++ b/runtime/queries/awk/highlights.scm
@@ -0,0 +1,122 @@
+; tree-sitter-awk v0.5.1
+
+; https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries
+
+; Order matters
+
+[
+ ";"
+ ","
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+] @operator
+
+(piped_io_statement [
+ "|"
+ "|&"
+] @operator)
+
+(redirected_io_statement [
+ ">"
+ ">>"
+] @operator)
+
+(update_exp [
+ "++"
+ "--"
+] @operator)
+
+(ternary_exp [
+ "?"
+ ":"
+] @operator)
+
+(assignment_exp [
+ "="
+ "+="
+ "-="
+ "*="
+ "/="
+ "%="
+ "^="
+] @operator)
+
+(unary_exp [
+ "!"
+ "+"
+ "-"
+] @operator)
+
+(binary_exp [
+ "^"
+ "**"
+ "*"
+ "/"
+ "%"
+ "+"
+ "-"
+ "<"
+ ">"
+ "<="
+ ">="
+ "=="
+ "!="
+ "~"
+ "!~"
+ "in"
+ "&&"
+ "||"
+] @operator)
+
+[
+ "@include"
+ "@load"
+ "@namespace"
+ (pattern)
+] @namespace
+
+[
+ "function"
+ "func"
+ "print"
+ "printf"
+ "if"
+ "else"
+ "do"
+ "while"
+ "for"
+ "in"
+ "delete"
+ "return"
+ "exit"
+ "switch"
+ "case"
+ "default"
+ (break_statement)
+ (continue_statement)
+ (next_statement)
+ (nextfile_statement)
+ (getline_input)
+ (getline_file)
+] @keyword
+
+(comment) @comment
+(regex) @string.regexp
+(number) @constant.numeric
+(string) @string
+
+(func_call name: (identifier) @function)
+(func_def name: (identifier) @function)
+
+(field_ref (_) @variable)
+[
+ (identifier)
+ (field_ref)
+] @variable
+
+(ns_qualified_name "::" @operator)
+(ns_qualified_name (namespace) @namespace)
diff --git a/runtime/queries/awk/injections.scm b/runtime/queries/awk/injections.scm
new file mode 100644
index 00000000..321c90ad
--- /dev/null
+++ b/runtime/queries/awk/injections.scm
@@ -0,0 +1,2 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
diff --git a/runtime/queries/awk/textobjects.scm b/runtime/queries/awk/textobjects.scm
new file mode 100644
index 00000000..467a8982
--- /dev/null
+++ b/runtime/queries/awk/textobjects.scm
@@ -0,0 +1,10 @@
+
+(func_def name: (identifier) (block) @function.inside) @function.around
+
+(param_list (_) @parameter.inside) @parameter.around
+
+(args (_) @parameter.inside) @parameter.around
+
+(comment) @comment.inside
+
+(comment)+ @comment.around
diff --git a/runtime/queries/bash/injections.scm b/runtime/queries/bash/injections.scm
index 321c90ad..0fddb10f 100644
--- a/runtime/queries/bash/injections.scm
+++ b/runtime/queries/bash/injections.scm
@@ -1,2 +1,8 @@
((comment) @injection.content
(#set! injection.language "comment"))
+
+(command
+ name: (command_name (word) @_command)
+ argument: (raw_string) @injection.content
+ (#match? @_command "^[gnm]?awk$")
+ (#set! injection.language "awk")) \ No newline at end of file