Function: java-ts-mode
java-ts-mode is an autoloaded, interactive and byte-compiled function
defined in java-ts-mode.el.gz.
Signature
(java-ts-mode)
Documentation
Major mode for editing Java, powered by tree-sitter.
In addition to any hooks its parent mode prog-mode might have run,
this mode runs the hook java-ts-mode-hook, as the final or penultimate
step during initialization.
Probably introduced at or before Emacs version 29.1.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/java-ts-mode.el.gz
;;;###autoload
(define-derived-mode java-ts-mode prog-mode "Java"
"Major mode for editing Java, powered by tree-sitter."
:group 'java
:syntax-table java-ts-mode--syntax-table
(unless (treesit-ensure-installed 'java)
(error "Tree-sitter for Java isn't available"))
(let ((primary-parser (treesit-parser-create 'java)))
;; Comments.
(c-ts-common-comment-setup)
;; Indent.
(setq-local c-ts-common-indent-type-regexp-alist
`((block . ,(rx (or "class_body"
"array_initializer"
"constructor_body"
"annotation_type_body"
"interface_body"
"lambda_expression"
"enum_body"
"switch_block"
"record_declaration_body"
"block")))
(close-bracket . "}")
(if . "if_statement")
(else . ("if_statement" . "alternative"))
(for . "for_statement")
(while . "while_statement")
(do . "do_statement")))
(setq-local c-ts-common-indent-offset 'java-ts-indent-offset)
(setq-local treesit-simple-indent-rules java-ts-mode--indent-rules)
(setq-local treesit-simple-indent-standalone-predicate
#'java-ts-mode--standalone-predicate)
(setq-local c-ts-common-list-indent-style 'simple)
;; Electric
(setq-local electric-indent-chars
(append "{}():;," electric-indent-chars))
;; Navigation.
(setq-local treesit-defun-type-regexp
(regexp-opt '("method_declaration"
"class_declaration"
"record_declaration"
"interface_declaration"
"enum_declaration"
"import_declaration"
"package_declaration"
"module_declaration"
"constructor_declaration")))
(setq-local treesit-defun-name-function #'java-ts-mode--defun-name)
(setq-local treesit-thing-settings
`((java
(sexp (not (or (and named
,(rx bos (or "program"
"line_comment"
"block_comment")
eos))
(and anonymous
,(rx (or "{" "}" "[" "]"
"(" ")" "<" ">"
","))))))
(list ,(rx bos (or "inferred_parameters"
"parenthesized_expression"
"argument_list"
"type_arguments"
"switch_block"
"record_pattern_body"
"block"
"resource_specification"
"annotation_argument_list"
"element_value_array_initializer"
"module_body"
"enum_body"
"type_parameters"
"class_body"
"constructor_body"
"annotation_type_body"
"interface_body"
"array_initializer"
"formal_parameters")
eos))
(sentence ,(rx (or "statement"
"local_variable_declaration"
"field_declaration"
"module_declaration"
"package_declaration"
"import_declaration")))
(text ,(regexp-opt '("line_comment"
"block_comment"
"text_block"))))))
;; Font-lock.
(setq-local treesit-font-lock-settings
(java-ts-mode--font-lock-settings))
;; Inject doxygen parser for comment.
(when (and java-ts-mode-enable-doxygen
(treesit-ensure-installed 'doxygen))
(setq-local treesit-primary-parser primary-parser)
(setq-local treesit-font-lock-settings
(append treesit-font-lock-settings
c-ts-mode-doxygen-comment-font-lock-settings))
(setq-local treesit-range-settings
(treesit-range-rules
:embed 'doxygen
:host 'java
:local t
`(((block_comment) @cap (:match "/\\*\\*" @cap)))))))
(setq-local treesit-font-lock-feature-list java-ts-mode--feature-list)
;; Imenu.
(setq-local treesit-simple-imenu-settings
'(("Class" "\\`class_declaration\\'" nil nil)
("Interface" "\\`interface_declaration\\'" nil nil)
("Enum" "\\`record_declaration\\'" nil nil)
("Method" "\\`method_declaration\\'" nil nil)))
;; Outline minor mode
(setq-local treesit-outline-predicate
(rx bos (or "class_declaration"
"interface_declaration"
"method_declaration"
"constructor_declaration")
eos))
(treesit-major-mode-setup))