feat(php): add support for new relative_name node

This commit is contained in:
Caleb White 2025-02-26 08:36:24 -06:00 committed by Christian Clason
parent 93ce9feb4f
commit 081a99b3be
4 changed files with 175 additions and 34 deletions

View file

@ -552,10 +552,10 @@
"revision": "bb53f204aa3e7507960014642965c9f9a9e84b1d"
},
"php": {
"revision": "f3a19ab3217a6e838870fc7142fa492d1fd7a7c9"
"revision": "b22484c92180e6e30c14477f00e1c7f9d2e39304"
},
"php_only": {
"revision": "f3a19ab3217a6e838870fc7142fa492d1fd7a7c9"
"revision": "b22484c92180e6e30c14477f00e1c7f9d2e39304"
},
"phpdoc": {
"revision": "fe3202e468bc17332bec8969f2b50ff1f1da3a46"

View file

@ -194,6 +194,8 @@
(name) @type
(qualified_name
(name) @type)
(relative_name
(name) @type)
])
(named_type
@ -208,6 +210,8 @@
(name) @type
(qualified_name
(name) @type)
(relative_name
(name) @type)
])
(enum_declaration
@ -269,6 +273,8 @@
(name) @type
(qualified_name
(name) @type)
(relative_name
(name) @type)
])
(scoped_call_expression
@ -276,6 +282,8 @@
(name) @type
(qualified_name
(name) @type)
(relative_name
(name) @type)
])
(class_constant_access_expression
@ -284,6 +292,8 @@
(name) @type
(qualified_name
(name) @type)
(relative_name
(name) @type)
]
(name) @constant)
@ -292,6 +302,8 @@
(name) @type
(qualified_name
(name) @type)
(relative_name
(name) @type)
])
(scoped_property_access_expression
@ -309,6 +321,8 @@
(name) @type
(qualified_name
(name) @type)
(relative_name
(name) @type)
])
; Functions, methods, constructors
@ -326,11 +340,13 @@
name: (name) @function.method)
(function_call_expression
function: (qualified_name
(name) @function.call))
(function_call_expression
(name) @function.call)
function: [
(name) @function.call
(qualified_name
(name) @function.call)
(relative_name
(name) @function.call)
])
(scoped_call_expression
name: (name) @function.call)
@ -365,6 +381,8 @@
(name) @constructor
(qualified_name
(name) @constructor)
(relative_name
(name) @constructor)
])
; Parameters
@ -410,6 +428,9 @@
(namespace_name
(name) @module)
(relative_name
"namespace" @module.builtin)
; Attributes
(attribute_list) @attribute

View file

@ -2,49 +2,22 @@
namespace Foo\Bar;
//^^^^^^^ @keyword.type
// ^^^ @module
// ^^^ @module
use Foo\Baz as Baaz;
//^ @keyword.import
// ^^^ @module
// ^^^ @type
// ^^ @keyword.operator
// ^^^^ @type.definition
use Foo\Baz\{Foo, Bar};
// ^^^ @type
// ^^^ @type
use function Foo\foo as fooo;
// ^^^^^^^^ @keyword.function
// ^^^ @function
// ^^^^ @function
use function Foo\{bar, baz};
// ^^^ @function
// ^^^ @function
use const Foo\FOO as FOOO;
// ^^^^^ @keyword.modifier
// ^^^ @constant
// ^^^^ @constant
use const Foo\{FOO, BAR};
// ^^^ @constant
// ^^^ @constant
use Foo\Baz\{
// ^^^ @module
// ^^^ @module
Bar,
//^^^ @type
function foo,
//^^^^^^^^ @keyword.function
// ^^^ @function
const FOO,
//^^^^^ @keyword.modifier
// ^^^ @constant
};
abstract class A

View file

@ -0,0 +1,147 @@
<?php
namespace Foo\Bar;
// ^^^ @module
// ^^^ @module
use Baz as Baaz;
// ^^^ @type
// ^^^^ @type
use Foo\Baz as Baaz;
// ^^^ @module
// ^^^ @type
// ^^^^ @type
use Foo\{Bar, Baz as Baaz};
// ^^^ @type
// ^^^ @type
// ^^^^ @type
use function foo as fooo;
// ^^^ @function
// ^^^^ @function
//
use function Foo\foo as fooo;
// ^^^ @module
// ^^^ @function
// ^^^^ @function
use function Foo\{bar, foo as fooo};
// ^^^ @function
// ^^^ @function
// ^^^^ @function
use const FOO as FOOO;
// ^^^ @constant
// ^^^^ @constant
use const Foo\FOO as FOOO;
// ^^^ @module
// ^^^ @constant
// ^^^^ @constant
use const Foo\{FOO as FOOO, BAR};
// ^^^ @constant
// ^^^^ @constant
// ^^^ @constant
use Foo\Baz\{
// ^^^ @module
// ^^^ @module
Bar as Barr,
//^^^ @type
// ^^^^ @type
Foo\Bar as Barr,
//^^^ @module
// ^^^ @type
// ^^^^ @type
function foo as fooo,
// ^^^ @function
// ^^^^ @function
function Foo\foo as fooo,
// ^^^ @module
// ^^^ @function
// ^^^^ @function
const FOO as FOOO,
// ^^^ @constant
// ^^^^ @constant
const Foo\FOO as FOOO,
// ^^^ @module
// ^^^ @constant
// ^^^^ @constant
};
class Foo {
public function foo() {
Bar::foo();
// ^^^ @type
// ^^^ @function.call
\Bar::foo();
// ^^^ @type
// ^^^ @function.call
Foo\Bar::foo();
// ^^^ @module
// ^^^ @type
// ^^^ @function.call
\Foo\Bar::foo();
// ^^^ @module
// ^^^ @type
// ^^^ @function.call
namespace\Bar::foo();
// ^^^^^^^^^ @module.builtin
// ^^^ @type
// ^^^ @function.call
namespace\Foo\Bar::foo();
// ^^^^^^^^^ @module.builtin
// ^^^ @module
// ^^^ @type
// ^^^ @function.call
new Bar();
// ^^^ @constructor
new \Bar();
// ^^^ @constructor
new Foo\Bar();
// ^^^ @module
// ^^^ @constructor
new \Foo\Bar();
// ^^^ @module
// ^^^ @constructor
new namespace\Bar();
// ^^^^^^^^^ @module.builtin
// ^^^ @constructor
new namespace\Foo\Bar();
// ^^^^^^^^^ @module.builtin
// ^^^ @module
// ^^^ @constructor
BAZ;
// ^^^ @constant
\BAZ;
// ^^^ @constant
Foo\BAZ;
// ^^^ @module
// ^^^ @constant
\Foo\BAZ;
// ^^^ @module
// ^^^ @constant
namespace\BAZ;
// ^^^^^^^^^ @module.builtin
// ^^^ @constant
namespace\Foo\BAZ;
// ^^^^^^^^^ @module.builtin
// ^^^ @module
// ^^^ @constant
foo();
// ^^^ @function.call
\foo();
// ^^^ @function.call
Foo\foo();
// ^^^ @module
// ^^^ @function.call
\Foo\foo();
// ^^^ @module
// ^^^ @function.call
namespace\foo();
// ^^^^^^^^^ @module.builtin
// ^^^ @function.call
namespace\Foo\foo();
// ^^^^^^^^^ @module.builtin
// ^^^ @module
// ^^^ @function.call
}
}