Skip to content

Commit

Permalink
Add php_only language config and queries
Browse files Browse the repository at this point in the history
php_only is required enabling php injections like in blade templates
  • Loading branch information
lelgenio committed Feb 27, 2024
1 parent 00653c7 commit 023987f
Show file tree
Hide file tree
Showing 5 changed files with 186 additions and 0 deletions.
1 change: 1 addition & 0 deletions book/src/generated/lang-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@
| pem || | | |
| perl |||| `perlnavigator` |
| php |||| `intelephense` |
| php_only || | | |
| pkl || || |
| po ||| | |
| pod || | | |
Expand Down
12 changes: 12 additions & 0 deletions languages.toml
Original file line number Diff line number Diff line change
Expand Up @@ -930,6 +930,18 @@ indent = { tab-width = 4, unit = " " }
name = "php"
source = { git = "https://github.com/tree-sitter/tree-sitter-php", rev = "f860e598194f4a71747f91789bf536b393ad4a56" }

[[language]]
name = "php-only"
scope = "source.php-only"
injection-regex = "php-only"
file-types = []
indent = { tab-width = 4, unit = " " }
roots = ["composer.json", "index.php"]

[[grammar]]
name = "php-only"
source = { git = "https://github.com/tree-sitter/tree-sitter-php", rev = "cf1f4a0f1c01c705c1d6cf992b104028d5df0b53", subpath = "php_only" }

[[language]]
name = "twig"
scope = "source.twig"
Expand Down
123 changes: 123 additions & 0 deletions runtime/queries/php-only/highlights.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
(php_tag) @tag
"?>" @tag

; Types

(primitive_type) @type.builtin
(cast_type) @type.builtin
(named_type (name) @type) @type
(named_type (qualified_name) @type) @type

; Functions

(array_creation_expression "array" @function.builtin)
(list_literal "list" @function.builtin)

(method_declaration
name: (name) @function.method)

(function_call_expression
function: [(qualified_name (name)) (name)] @function)

(scoped_call_expression
name: (name) @function)

(member_call_expression
name: (name) @function.method)

(function_definition
name: (name) @function)

; Member

(property_element
(variable_name) @variable.other.member)

(member_access_expression
name: (variable_name (name)) @variable.other.member)
(member_access_expression
name: (name) @variable.other.member)

; Variables

(relative_scope) @variable.builtin

((name) @constant
(#match? @constant "^_?[A-Z][A-Z\\d_]+$"))
((name) @constant.builtin
(#match? @constant.builtin "^__[A-Z][A-Z\d_]+__$"))

((name) @constructor
(#match? @constructor "^[A-Z]"))

((name) @variable.builtin
(#eq? @variable.builtin "this"))

(variable_name) @variable

; Basic tokens
[
(string)
(string_value)
(encapsed_string)
(heredoc)
(heredoc_body)
(nowdoc_body)
] @string
(boolean) @constant.builtin.boolean
(null) @constant.builtin
(integer) @constant.builtin.integer
(float) @constant.builtin.float
(comment) @comment

"$" @operator

; Keywords

"abstract" @keyword
"as" @keyword
"break" @keyword
"case" @keyword
"catch" @keyword
"class" @keyword
"const" @keyword
"continue" @keyword
"declare" @keyword
"default" @keyword
"do" @keyword
"echo" @keyword
"else" @keyword
"elseif" @keyword
"enddeclare" @keyword
"endforeach" @keyword
"endif" @keyword
"endswitch" @keyword
"endwhile" @keyword
"extends" @keyword
"final" @keyword
"finally" @keyword
"for" @keyword
"foreach" @keyword
"function" @keyword
"global" @keyword
"if" @keyword
"implements" @keyword
"include_once" @keyword
"include" @keyword
"insteadof" @keyword
"interface" @keyword
"namespace" @keyword
"new" @keyword
"private" @keyword
"protected" @keyword
"public" @keyword
"require_once" @keyword
"require" @keyword
"return" @keyword
"static" @keyword
"switch" @keyword
"throw" @keyword
"trait" @keyword
"try" @keyword
"use" @keyword
"while" @keyword
10 changes: 10 additions & 0 deletions runtime/queries/php-only/injections.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
((comment) @injection.content
(#set! injection.language "phpdoc"))

(heredoc
(heredoc_body) @injection.content
(heredoc_end) @injection.language)

(nowdoc
(nowdoc_body) @injection.content
(heredoc_end) @injection.language)
40 changes: 40 additions & 0 deletions runtime/queries/php-only/tags.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
(namespace_definition
name: (namespace_name) @name) @module

(interface_declaration
name: (name) @name) @definition.interface

(trait_declaration
name: (name) @name) @definition.interface

(class_declaration
name: (name) @name) @definition.class

(class_interface_clause [(name) (qualified_name)] @name) @impl

(property_declaration
(property_element (variable_name (name) @name))) @definition.field

(function_definition
name: (name) @name) @definition.function

(method_declaration
name: (name) @name) @definition.function

(object_creation_expression
[
(qualified_name (name) @name)
(variable_name (name) @name)
]) @reference.class

(function_call_expression
function: [
(qualified_name (name) @name)
(variable_name (name)) @name
]) @reference.call

(scoped_call_expression
name: (name) @name) @reference.call

(member_call_expression
name: (name) @name) @reference.call

0 comments on commit 023987f

Please sign in to comment.