From 1d189820a150eb38c55d419ad6dd350321d4c8ee Mon Sep 17 00:00:00 2001
From: woojiq <122799969+woojiq@users.noreply.github.com>
Date: Mon, 7 Aug 2023 16:48:54 +0300
Subject: [PATCH] feat(indent): add basic java indentation queries (#7844)

---
 book/src/generated/lang-support.md |  2 +-
 languages.toml                     |  2 +-
 runtime/queries/java/indents.scm   | 35 ++++++++++++++++++++++++++++++
 3 files changed, 37 insertions(+), 2 deletions(-)
 create mode 100644 runtime/queries/java/indents.scm

diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 22689c9c..cb3a6f55 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -69,7 +69,7 @@
 | idris |  |  |  | `idris2-lsp` |
 | iex | ✓ |  |  |  |
 | ini | ✓ |  |  |  |
-| java | ✓ | ✓ |  | `jdtls` |
+| java | ✓ | ✓ | ✓ | `jdtls` |
 | javascript | ✓ | ✓ | ✓ | `typescript-language-server` |
 | jsdoc | ✓ |  |  |  |
 | json | ✓ |  | ✓ | `vscode-json-language-server` |
diff --git a/languages.toml b/languages.toml
index 967bbea7..d35b835e 100644
--- a/languages.toml
+++ b/languages.toml
@@ -833,7 +833,7 @@ injection-regex = "java"
 file-types = ["java"]
 roots = ["pom.xml", "build.gradle", "build.gradle.kts"]
 language-servers = [ "jdtls" ]
-indent = { tab-width = 4, unit = "    " }
+indent = { tab-width = 2, unit = "  " }
 
 [[grammar]]
 name = "java"
diff --git a/runtime/queries/java/indents.scm b/runtime/queries/java/indents.scm
new file mode 100644
index 00000000..76e21861
--- /dev/null
+++ b/runtime/queries/java/indents.scm
@@ -0,0 +1,35 @@
+[
+  (class_body)
+  (enum_body)
+  (interface_body)
+  (constructor_body)
+  (annotation_type_body)
+  (module_body)
+  (block)
+  (switch_block)
+  (array_initializer)
+  (argument_list)
+  (formal_parameters)
+  (annotation_argument_list)
+  (element_value_array_initializer)
+] @indent
+
+[
+  "}"
+  ")"
+  "]"
+] @outdent
+
+; Single statement after if/while/for without brackets
+(if_statement
+  consequence: (_) @indent
+  (#not-kind-eq? @indent "block")
+  (#set! "scope" "all"))
+(while_statement
+  body: (_) @indent
+  (#not-kind-eq? @indent "block")
+  (#set! "scope" "all"))
+(for_statement
+  (_) @indent
+  (#not-kind-eq? @indent "block")
+  (#set! "scope" "all"))