mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-31 06:50:10 +00:00
php: Add runnable tests (#11514)
### This pull request adds the following: - Missing mapping for the `yield` keyword. - Outline scheme for `describe`, `it` and `test` function_call_expressions (to support Pest runnable) - Pest runnable support - PHPUnit runnable support - Task for running selected PHP code. ## Queries explanations #### Query 1 (PHPUnit: Run specific method test): 1. Class is not abstract (because you cannot run tests from an abstract class) 2. Class has `Test` suffix 3. Method has public modifier(or no modifiers, default is public) 4. Method has `test` prefix #### Query 2 (PHPUnit: Run specific method test with `@test` annotation): 1. Class is not abstract (because you cannot run tests from an abstract class) 2. Class has `Test` suffix 3. Method has public modifier(or no modifiers, default is public) 4. Method has `@test` annotation #### Query 3 (PHPUnit: Run specific method test with `#[Test]` attribute): 1. Class is not abstract (because you cannot run tests from an abstract class) 2. Class has `Test` suffix 3. Method has public modifier(or no modifiers, default is public) 4. Method has `#[Test]` attribute #### Query 4 (PHPUnit: Run all tests inside the class): 1. Class is not abstract (because you cannot run tests from an abstract class) 2. Class has `Test` suffix #### Query 5 (Pest: Run function test) 1. Function expression has one of the following names: `describe`, `it` or `test` 2. Function expression first argument is a string ### **PHPUnit: Example for valid test class** <img width="549" alt="Screenshot 2024-05-08 at 10 41 34" src="https://github.com/zed-industries/zed/assets/62463826/e84269de-4f53-410b-b93b-713f9448dc79"> ### **PHPUnit: Example for invalid test class** All the methods should be ignored because you cannot run tests on an abstract class. <img width="608" alt="Screenshot 2024-05-07 at 22 28 57" src="https://github.com/zed-industries/zed/assets/62463826/8c6b3921-5266-4d88-ada5-5cd827bcf242"> ### **Pest: Example** https://github.com/zed-industries/zed/assets/62463826/bce133eb-0a6f-4ca2-9739-12d9169bb9d6 You should now see all your **Pest** tests inside the buffer symbols modal. ![Screenshot 2024-05-08 at 22 51 25](https://github.com/zed-industries/zed/assets/62463826/9c818b74-383c-45e5-9b41-8dec92759a14) Release Notes: - Added test runnable detection for PHP (PHPUnit & Pest). - Added task for running selected PHP code. - Added `describe`, `test` and `it` functions to buffer symbols, to support Pest runnable. - Added `yield` keyword to PHP keyword mapping.
This commit is contained in:
parent
c4e87444e7
commit
bfdd9d89a7
4 changed files with 120 additions and 0 deletions
|
@ -122,3 +122,4 @@
|
|||
"try" @keyword
|
||||
"use" @keyword
|
||||
"while" @keyword
|
||||
"yield" @keyword
|
||||
|
|
|
@ -27,3 +27,15 @@
|
|||
"trait" @context
|
||||
name: (_) @name
|
||||
) @item
|
||||
|
||||
; Add support for Pest runnable
|
||||
(function_call_expression
|
||||
function: (_) @context
|
||||
(#any-of? @context "it" "test" "describe")
|
||||
arguments: (arguments
|
||||
.
|
||||
(argument
|
||||
(encapsed_string (string_value) @name)
|
||||
)
|
||||
)
|
||||
) @item
|
||||
|
|
88
extensions/php/languages/php/runnables.scm
Normal file
88
extensions/php/languages/php/runnables.scm
Normal file
|
@ -0,0 +1,88 @@
|
|||
; Class that follow the naming convention of PHPUnit test classes
|
||||
; and that doesn't have the abstract modifier
|
||||
; and have a method that follow the naming convention of PHPUnit test methods
|
||||
; and the method is public
|
||||
(class_declaration
|
||||
modifier: (_)? @_modifier
|
||||
(#not-eq? @_modifier "abstract")
|
||||
name: (_) @_name
|
||||
(#match? @_name ".*Test$")
|
||||
body: (declaration_list
|
||||
(method_declaration
|
||||
(visibility_modifier)? @_visibility
|
||||
(#eq? @_visibility "public")
|
||||
name: (_) @run
|
||||
(#match? @run "^test.*")
|
||||
)
|
||||
)
|
||||
) @phpunit-test
|
||||
|
||||
; Class that follow the naming convention of PHPUnit test classes
|
||||
; and that doesn't have the abstract modifier
|
||||
; and have a method that has the @test annotation
|
||||
; and the method is public
|
||||
(class_declaration
|
||||
modifier: (_)? @_modifier
|
||||
(#not-eq? @_modifier "abstract")
|
||||
name: (_) @_name
|
||||
(#match? @_name ".*Test$")
|
||||
body: (declaration_list
|
||||
((comment) @_comment
|
||||
(#match? @_comment ".*@test\\b.*")
|
||||
.
|
||||
(method_declaration
|
||||
(visibility_modifier)? @_visibility
|
||||
(#eq? @_visibility "public")
|
||||
name: (_) @run
|
||||
(#not-match? @run "^test.*")
|
||||
))
|
||||
)
|
||||
) @phpunit-test
|
||||
|
||||
|
||||
; Class that follow the naming convention of PHPUnit test classes
|
||||
; and that doesn't have the abstract modifier
|
||||
; and have a method that has the #[Test] attribute
|
||||
; and the method is public
|
||||
(class_declaration
|
||||
modifier: (_)? @_modifier
|
||||
(#not-eq? @_modifier "abstract")
|
||||
name: (_) @_name
|
||||
(#match? @_name ".*Test$")
|
||||
body: (declaration_list
|
||||
(method_declaration
|
||||
(attribute_list
|
||||
(attribute_group
|
||||
(attribute (name) @_attribute)
|
||||
)
|
||||
)
|
||||
(#eq? @_attribute "Test")
|
||||
(visibility_modifier)? @_visibility
|
||||
(#eq? @_visibility "public")
|
||||
name: (_) @run
|
||||
(#not-match? @run "^test.*")
|
||||
)
|
||||
)
|
||||
) @phpunit-test
|
||||
|
||||
; Class that follow the naming convention of PHPUnit test classes
|
||||
; and that doesn't have the abstract modifier
|
||||
(class_declaration
|
||||
modifier: (_)? @_modifier
|
||||
(#not-eq? @_modifier "abstract")
|
||||
name: (_) @run
|
||||
(#match? @run ".*Test$")
|
||||
) @phpunit-test
|
||||
|
||||
; Add support for Pest runnable
|
||||
; Function expression that has `it`, `test` or `describe` as the function name
|
||||
(function_call_expression
|
||||
function: (_) @_name
|
||||
(#any-of? @_name "it" "test" "describe")
|
||||
arguments: (arguments
|
||||
.
|
||||
(argument
|
||||
(encapsed_string (string_value) @run)
|
||||
)
|
||||
)
|
||||
) @pest-test
|
19
extensions/php/languages/php/tasks.json
Normal file
19
extensions/php/languages/php/tasks.json
Normal file
|
@ -0,0 +1,19 @@
|
|||
[
|
||||
{
|
||||
"label": "phpunit test $ZED_SYMBOL",
|
||||
"command": "./vendor/bin/phpunit",
|
||||
"args": ["--filter $ZED_SYMBOL $ZED_FILE"],
|
||||
"tags": ["phpunit-test"]
|
||||
},
|
||||
{
|
||||
"label": "pest test $ZED_SYMBOL",
|
||||
"command": "./vendor/bin/pest",
|
||||
"args": ["--filter \"$ZED_SYMBOL\" $ZED_FILE"],
|
||||
"tags": ["pest-test"]
|
||||
},
|
||||
{
|
||||
"label": "execute selection $ZED_SELECTED_TEXT",
|
||||
"command": "php",
|
||||
"args": ["-r", "$ZED_SELECTED_TEXT"]
|
||||
}
|
||||
]
|
Loading…
Reference in a new issue