From 2f8e4e7b7be26cedfb7a0285adc5652a869e235c Mon Sep 17 00:00:00 2001 From: Damjan Cvetko Date: Sun, 19 Jun 2022 13:53:18 +0200 Subject: [PATCH 1/4] Add jsonSerialize to some LSP classes to prevent serializing "unset" fields. New Semantic check. --- .github/workflows/semantic.yml | 25 +++++++++++++++++++++++++ src/ParameterInformation.php | 18 ++++++++++++++++-- src/SignatureHelp.php | 20 +++++++++++++++++--- src/SignatureHelpClientCapabilities.php | 22 ++++++++++++++++++---- src/SignatureHelpOptions.php | 18 ++++++++++++++++-- src/SignatureInformation.php | 22 ++++++++++++++++++---- 6 files changed, 110 insertions(+), 15 deletions(-) create mode 100644 .github/workflows/semantic.yml diff --git a/.github/workflows/semantic.yml b/.github/workflows/semantic.yml new file mode 100644 index 0000000..107b00a --- /dev/null +++ b/.github/workflows/semantic.yml @@ -0,0 +1,25 @@ +name: 'Semantic Pull Request' + +on: + pull_request_target: + types: + - opened + - edited + - synchronize +# pull_request: +# types: +# - opened +# - edited +# - synchronize + +jobs: + main: + name: Validate PR Title + runs-on: ubuntu-latest + steps: + - name: semantic-pull-request + uses: amannn/action-semantic-pull-request@v4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + validateSingleCommit: false diff --git a/src/ParameterInformation.php b/src/ParameterInformation.php index a94bb67..102251f 100644 --- a/src/ParameterInformation.php +++ b/src/ParameterInformation.php @@ -2,11 +2,13 @@ namespace LanguageServerProtocol; +use JsonSerializable; + /** * Represents a parameter of a callable-signature. A parameter can * have a label and a doc-comment. */ -class ParameterInformation +class ParameterInformation implements JsonSerializable { /** * The label of this parameter information. @@ -40,6 +42,18 @@ class ParameterInformation public function __construct($label, $documentation = null) { $this->label = $label; - $this->documentation = $documentation; + if ($this->documentation !== null) $this->documentation = $documentation; + } + + /** + * This is needed because VSCode Does not like nulls + * meaning if a null is sent then this will not compute + * + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter(get_object_vars($this)); } } diff --git a/src/SignatureHelp.php b/src/SignatureHelp.php index c5b853e..06b27b3 100644 --- a/src/SignatureHelp.php +++ b/src/SignatureHelp.php @@ -2,12 +2,14 @@ namespace LanguageServerProtocol; +use JsonSerializable; + /** * Signature help represents the signature of something * callable. There can be multiple signature but only one * active and only one active parameter. */ -class SignatureHelp +class SignatureHelp implements JsonSerializable { /** * One or more signatures. If no signatures are available the signature help @@ -55,7 +57,19 @@ class SignatureHelp public function __construct(array $signatures = null, $activeSignature = null, int $activeParameter = null) { $this->signatures = $signatures; - $this->activeSignature = $activeSignature; - $this->activeParameter = $activeParameter; + if ($this->activeSignature !== null) $this->activeSignature = $activeSignature; + if ($this->activeParameter !== null) $this->activeParameter = $activeParameter; + } + + /** + * This is needed because VSCode Does not like nulls + * meaning if a null is sent then this will not compute + * + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter(get_object_vars($this)); } } diff --git a/src/SignatureHelpClientCapabilities.php b/src/SignatureHelpClientCapabilities.php index 58b4805..df3ba3f 100644 --- a/src/SignatureHelpClientCapabilities.php +++ b/src/SignatureHelpClientCapabilities.php @@ -2,7 +2,9 @@ namespace LanguageServerProtocol; -class SignatureHelpClientCapabilities +use JsonSerializable; + +class SignatureHelpClientCapabilities implements JsonSerializable { /** * Whether signature help supports dynamic registration. @@ -36,8 +38,20 @@ public function __construct( SignatureHelpClientCapabilitiesSignatureInformation $signatureInformation = null, bool $contextSupport = null ) { - $this->dynamicRegistration = $dynamicRegistration; - $this->signatureInformation = $signatureInformation; - $this->contextSupport = $contextSupport; + if ($this->dynamicRegistration !== null) $this->dynamicRegistration = $dynamicRegistration; + if ($this->signatureInformation !== null) $this->signatureInformation = $signatureInformation; + if ($this->contextSupport !== null) $this->contextSupport = $contextSupport; + } + + /** + * This is needed because VSCode Does not like nulls + * meaning if a null is sent then this will not compute + * + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter(get_object_vars($this)); } } diff --git a/src/SignatureHelpOptions.php b/src/SignatureHelpOptions.php index 04222ed..561df12 100644 --- a/src/SignatureHelpOptions.php +++ b/src/SignatureHelpOptions.php @@ -2,10 +2,12 @@ namespace LanguageServerProtocol; +use JsonSerializable; + /** * Signature help options. */ -class SignatureHelpOptions +class SignatureHelpOptions implements JsonSerializable { /** * The characters that trigger signature help automatically. @@ -19,6 +21,18 @@ class SignatureHelpOptions */ public function __construct(array $triggerCharacters = null) { - $this->triggerCharacters = $triggerCharacters; + if ($this->triggerCharacters !== null) $this->triggerCharacters = $triggerCharacters; + } + + /** + * This is needed because VSCode Does not like nulls + * meaning if a null is sent then this will not compute + * + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter(get_object_vars($this)); } } diff --git a/src/SignatureInformation.php b/src/SignatureInformation.php index c7329fe..d6be6c9 100644 --- a/src/SignatureInformation.php +++ b/src/SignatureInformation.php @@ -2,12 +2,14 @@ namespace LanguageServerProtocol; +use JsonSerializable; + /** * Represents the signature of something callable. A signature * can have a label, like a function-name, a doc-comment, and * a set of parameters. */ -class SignatureInformation +class SignatureInformation implements JsonSerializable { /** * The label of this signature. Will be shown in @@ -59,8 +61,20 @@ public function __construct( int $activeParameter = null ) { $this->label = $label; - $this->parameters = $parameters; - $this->documentation = $documentation; - $this->activeParameter = $activeParameter; + if ($this->parameters !== null) $this->parameters = $parameters; + if ($this->documentation !== null) $this->documentation = $documentation; + if ($this->activeParameter !== null) $this->activeParameter = $activeParameter; + } + + /** + * This is needed because VSCode Does not like nulls + * meaning if a null is sent then this will not compute + * + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter(get_object_vars($this)); } } From 4ea7f5a5897de9420d89ba3722a3fcd5778c4515 Mon Sep 17 00:00:00 2001 From: Damjan Cvetko Date: Sun, 19 Jun 2022 14:13:26 +0200 Subject: [PATCH 2/4] Remove line ending converts. --- .gitattributes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 5525e5e..26c288b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -* text=auto +* text=auto eol=lf /.gitattributes export-ignore /.gitignore export-ignore From 8394417bbf04ebee42660f93ee9eb5fe016aaabc Mon Sep 17 00:00:00 2001 From: Damjan Cvetko Date: Sun, 19 Jun 2022 14:20:22 +0200 Subject: [PATCH 3/4] phpcs --- src/ParameterInformation.php | 4 +++- src/SignatureHelp.php | 8 ++++++-- src/SignatureHelpClientCapabilities.php | 12 +++++++++--- src/SignatureHelpOptions.php | 4 +++- src/SignatureInformation.php | 12 +++++++++--- 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/ParameterInformation.php b/src/ParameterInformation.php index 102251f..643b786 100644 --- a/src/ParameterInformation.php +++ b/src/ParameterInformation.php @@ -42,7 +42,9 @@ class ParameterInformation implements JsonSerializable public function __construct($label, $documentation = null) { $this->label = $label; - if ($this->documentation !== null) $this->documentation = $documentation; + if ($this->documentation !== null) { + $this->documentation = $documentation; + } } /** diff --git a/src/SignatureHelp.php b/src/SignatureHelp.php index 06b27b3..23266ee 100644 --- a/src/SignatureHelp.php +++ b/src/SignatureHelp.php @@ -57,8 +57,12 @@ class SignatureHelp implements JsonSerializable public function __construct(array $signatures = null, $activeSignature = null, int $activeParameter = null) { $this->signatures = $signatures; - if ($this->activeSignature !== null) $this->activeSignature = $activeSignature; - if ($this->activeParameter !== null) $this->activeParameter = $activeParameter; + if ($this->activeSignature !== null) { + $this->activeSignature = $activeSignature; + } + if ($this->activeParameter !== null) { + $this->activeParameter = $activeParameter; + } } /** diff --git a/src/SignatureHelpClientCapabilities.php b/src/SignatureHelpClientCapabilities.php index df3ba3f..a76ab96 100644 --- a/src/SignatureHelpClientCapabilities.php +++ b/src/SignatureHelpClientCapabilities.php @@ -38,9 +38,15 @@ public function __construct( SignatureHelpClientCapabilitiesSignatureInformation $signatureInformation = null, bool $contextSupport = null ) { - if ($this->dynamicRegistration !== null) $this->dynamicRegistration = $dynamicRegistration; - if ($this->signatureInformation !== null) $this->signatureInformation = $signatureInformation; - if ($this->contextSupport !== null) $this->contextSupport = $contextSupport; + if ($this->dynamicRegistration !== null) { + $this->dynamicRegistration = $dynamicRegistration; + } + if ($this->signatureInformation !== null) { + $this->signatureInformation = $signatureInformation; + } + if ($this->contextSupport !== null) { + $this->contextSupport = $contextSupport; + } } /** diff --git a/src/SignatureHelpOptions.php b/src/SignatureHelpOptions.php index 561df12..1b546cc 100644 --- a/src/SignatureHelpOptions.php +++ b/src/SignatureHelpOptions.php @@ -21,7 +21,9 @@ class SignatureHelpOptions implements JsonSerializable */ public function __construct(array $triggerCharacters = null) { - if ($this->triggerCharacters !== null) $this->triggerCharacters = $triggerCharacters; + if ($this->triggerCharacters !== null) { + $this->triggerCharacters = $triggerCharacters; + } } /** diff --git a/src/SignatureInformation.php b/src/SignatureInformation.php index d6be6c9..1b4d02a 100644 --- a/src/SignatureInformation.php +++ b/src/SignatureInformation.php @@ -61,9 +61,15 @@ public function __construct( int $activeParameter = null ) { $this->label = $label; - if ($this->parameters !== null) $this->parameters = $parameters; - if ($this->documentation !== null) $this->documentation = $documentation; - if ($this->activeParameter !== null) $this->activeParameter = $activeParameter; + if ($this->parameters !== null) { + $this->parameters = $parameters; + } + if ($this->documentation !== null) { + $this->documentation = $documentation; + } + if ($this->activeParameter !== null) { + $this->activeParameter = $activeParameter; + } } /** From bdc50525ed61b93088b2fdb000ad7f54bb7d4eaf Mon Sep 17 00:00:00 2001 From: Damjan Cvetko Date: Sun, 19 Jun 2022 14:39:45 +0200 Subject: [PATCH 4/4] No need for conditional setters, improve filtering of get_object_vars. --- src/ParameterInformation.php | 4 +--- src/SignatureHelp.php | 12 +++++------- src/SignatureHelpClientCapabilities.php | 16 ++++++---------- src/SignatureHelpOptions.php | 4 +--- src/SignatureInformation.php | 16 ++++++---------- 5 files changed, 19 insertions(+), 33 deletions(-) diff --git a/src/ParameterInformation.php b/src/ParameterInformation.php index 643b786..cd1f453 100644 --- a/src/ParameterInformation.php +++ b/src/ParameterInformation.php @@ -42,9 +42,7 @@ class ParameterInformation implements JsonSerializable public function __construct($label, $documentation = null) { $this->label = $label; - if ($this->documentation !== null) { - $this->documentation = $documentation; - } + $this->documentation = $documentation; } /** diff --git a/src/SignatureHelp.php b/src/SignatureHelp.php index 23266ee..102411f 100644 --- a/src/SignatureHelp.php +++ b/src/SignatureHelp.php @@ -57,12 +57,8 @@ class SignatureHelp implements JsonSerializable public function __construct(array $signatures = null, $activeSignature = null, int $activeParameter = null) { $this->signatures = $signatures; - if ($this->activeSignature !== null) { - $this->activeSignature = $activeSignature; - } - if ($this->activeParameter !== null) { - $this->activeParameter = $activeParameter; - } + $this->activeSignature = $activeSignature; + $this->activeParameter = $activeParameter; } /** @@ -74,6 +70,8 @@ public function __construct(array $signatures = null, $activeSignature = null, i #[\ReturnTypeWillChange] public function jsonSerialize() { - return array_filter(get_object_vars($this)); + return array_filter(get_object_vars($this), function ($v) { + return $v !== null; + }); } } diff --git a/src/SignatureHelpClientCapabilities.php b/src/SignatureHelpClientCapabilities.php index a76ab96..582e51a 100644 --- a/src/SignatureHelpClientCapabilities.php +++ b/src/SignatureHelpClientCapabilities.php @@ -38,15 +38,9 @@ public function __construct( SignatureHelpClientCapabilitiesSignatureInformation $signatureInformation = null, bool $contextSupport = null ) { - if ($this->dynamicRegistration !== null) { - $this->dynamicRegistration = $dynamicRegistration; - } - if ($this->signatureInformation !== null) { - $this->signatureInformation = $signatureInformation; - } - if ($this->contextSupport !== null) { - $this->contextSupport = $contextSupport; - } + $this->dynamicRegistration = $dynamicRegistration; + $this->signatureInformation = $signatureInformation; + $this->contextSupport = $contextSupport; } /** @@ -58,6 +52,8 @@ public function __construct( #[\ReturnTypeWillChange] public function jsonSerialize() { - return array_filter(get_object_vars($this)); + return array_filter(get_object_vars($this), function ($v) { + return $v !== null; + }); } } diff --git a/src/SignatureHelpOptions.php b/src/SignatureHelpOptions.php index 1b546cc..83b2dbf 100644 --- a/src/SignatureHelpOptions.php +++ b/src/SignatureHelpOptions.php @@ -21,9 +21,7 @@ class SignatureHelpOptions implements JsonSerializable */ public function __construct(array $triggerCharacters = null) { - if ($this->triggerCharacters !== null) { - $this->triggerCharacters = $triggerCharacters; - } + $this->triggerCharacters = $triggerCharacters; } /** diff --git a/src/SignatureInformation.php b/src/SignatureInformation.php index 1b4d02a..787fc08 100644 --- a/src/SignatureInformation.php +++ b/src/SignatureInformation.php @@ -61,15 +61,9 @@ public function __construct( int $activeParameter = null ) { $this->label = $label; - if ($this->parameters !== null) { - $this->parameters = $parameters; - } - if ($this->documentation !== null) { - $this->documentation = $documentation; - } - if ($this->activeParameter !== null) { - $this->activeParameter = $activeParameter; - } + $this->parameters = $parameters; + $this->documentation = $documentation; + $this->activeParameter = $activeParameter; } /** @@ -81,6 +75,8 @@ public function __construct( #[\ReturnTypeWillChange] public function jsonSerialize() { - return array_filter(get_object_vars($this)); + return array_filter(get_object_vars($this), function ($v) { + return $v !== null; + }); } }