This is an automated email from the ASF dual-hosted git repository.
junichi11 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 24ba6df45f Fix the named argument code completion for constructors
new d81235cc25 Merge pull request #6911 from
junichi11/php-named-argument-cc-for-constructor
24ba6df45f is described below
commit 24ba6df45f395f1cbec9459526befa6f48345de9
Author: Junichi Yamamoto <[email protected]>
AuthorDate: Wed Jan 3 16:33:13 2024 +0900
Fix the named argument code completion for constructors
- Show argument names in consturctors
- Don't add `:` if an existing name has `:` (an improvement)
e.g. ^maxLength: (^: caret)
We are unsure whether a user expects to add or override an item in this
context.
So, just add a name. (i.e. don't add ":")
This behavior is useful when the consuming completion(<kbd>Ctrl</kbd> +
<kbd>Enter</kbd>) is used.
- Add unit tests
---
.../editor/completion/CompletionContextFinder.java | 4 +-
.../php/editor/completion/PHPCodeCompletion.java | 79 ++++++++++++------
.../php/editor/completion/PHPCompletionItem.java | 37 ++++++++-
.../namedArgumentsConstructor01.php | 25 ++++++
....php.testNamedArgumentsConstructor01.completion | 92 +++++++++++++++++++++
.../namedArgumentsConstructor02.php | 26 ++++++
...hp.testNamedArgumentsConstructor02_a.completion | 6 ++
...hp.testNamedArgumentsConstructor02_b.completion | 92 +++++++++++++++++++++
.../namedArgumentsConstructor03.php | 25 ++++++
....php.testNamedArgumentsConstructor03.completion | 92 +++++++++++++++++++++
.../namedArgumentsConstructor04.php | 25 ++++++
....php.testNamedArgumentsConstructor04.completion | 6 ++
.../namedArgumentsConstructor05.php | 26 ++++++
...edArgumentsConstructor05_Template01.cccustomtpl | 2 +
...edArgumentsConstructor05_Template02.cccustomtpl | 2 +
...hp.testNamedArgumentsConstructor05_a.completion | 92 +++++++++++++++++++++
...hp.testNamedArgumentsConstructor05_b.completion | 92 +++++++++++++++++++++
...hp.testNamedArgumentsConstructor05_c.completion | 6 ++
.../namedArgumentsConstructor06.php | 33 ++++++++
....php.testNamedArgumentsConstructor06.completion | 96 ++++++++++++++++++++++
.../editor/completion/PHP80CodeCompletionTest.java | 46 +++++++++++
.../completion/PHPCodeCompletionTestBase.java | 13 +++
22 files changed, 888 insertions(+), 29 deletions(-)
diff --git
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/CompletionContextFinder.java
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/CompletionContextFinder.java
index 8babca1a2d..81c2724532 100644
---
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/CompletionContextFinder.java
+++
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/CompletionContextFinder.java
@@ -235,7 +235,7 @@ final class CompletionContextFinder {
HTML, CLASS_NAME, INTERFACE_NAME, BACKING_TYPE,
TYPE_NAME, RETURN_TYPE_NAME, RETURN_UNION_OR_INTERSECTION_TYPE_NAME,
FIELD_TYPE_NAME, CONST_TYPE_NAME, VISIBILITY_MODIFIER_OR_TYPE_NAME, STRING,
CLASS_MEMBER, STATIC_CLASS_MEMBER, PHPDOC, INHERITANCE, EXTENDS,
IMPLEMENTS, METHOD_NAME,
- CLASS_MEMBER_PARAMETER_NAME, STATIC_CLASS_MEMBER_PARAMETER_NAME,
FUNCTION_PARAMETER_NAME,
+ CLASS_MEMBER_PARAMETER_NAME, STATIC_CLASS_MEMBER_PARAMETER_NAME,
FUNCTION_PARAMETER_NAME, CONSTRUCTOR_PARAMETER_NAME,
CLASS_CONTEXT_KEYWORDS, SERVER_ENTRY_CONSTANTS, NONE, NEW_CLASS,
GLOBAL, NAMESPACE_KEYWORD,
GROUP_USE_KEYWORD, GROUP_USE_CONST_KEYWORD, GROUP_USE_FUNCTION_KEYWORD,
USE_KEYWORD, USE_CONST_KEYWORD, USE_FUNCTION_KEYWORD,
DEFAULT_PARAMETER_VALUE, OPEN_TAG, THROW, THROW_NEW, CATCH,
CLASS_MEMBER_IN_STRING,
@@ -1608,6 +1608,8 @@ final class CompletionContextFinder {
retval = CompletionContext.CLASS_MEMBER_PARAMETER_NAME;
} else if (acceptTokenChains(ts, STATIC_CLASS_MEMBER_TOKENCHAINS,
true)) {
retval = CompletionContext.STATIC_CLASS_MEMBER_PARAMETER_NAME;
+ } else if (acceptTokenChains(ts, CLASS_NAME_TOKENCHAINS, true)) {
+ retval = CompletionContext.CONSTRUCTOR_PARAMETER_NAME;
} else {
retval = CompletionContext.FUNCTION_PARAMETER_NAME;
}
diff --git
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java
index cc1039a784..4df5313c8a 100644
---
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java
+++
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java
@@ -57,6 +57,7 @@ import org.netbeans.modules.csl.spi.support.CancelSupport;
import org.netbeans.modules.parsing.spi.indexing.support.QuerySupport;
import org.netbeans.modules.parsing.spi.indexing.support.QuerySupport.Kind;
import org.netbeans.modules.php.api.PhpVersion;
+import org.netbeans.modules.php.api.util.StringUtils;
import org.netbeans.modules.php.editor.CodeUtils;
import org.netbeans.modules.php.editor.NavUtils;
import org.netbeans.modules.php.editor.PredefinedSymbols;
@@ -432,6 +433,10 @@ public class PHPCodeCompletion implements
CodeCompletionHandler2 {
case EXPRESSION:
autoCompleteExpression(completionResult, request);
break;
+ case CONSTRUCTOR_PARAMETER_NAME:
+ autoCompleteExpression(completionResult, request);
+ autoCompleteConstructorParameterName(completionResult,
request);
+ break;
case CLASS_MEMBER_PARAMETER_NAME:
autoCompleteExpression(completionResult, request);
autoCompleteClassMethodParameterName(completionResult,
request, false);
@@ -1604,6 +1609,32 @@ public class PHPCodeCompletion implements
CodeCompletionHandler2 {
}
}
+ private void autoCompleteConstructorParameterName(final
PHPCompletionResult completionResult, final PHPCompletionItem.CompletionRequest
request) {
+ if (CancelSupport.getDefault().isCancelled()) {
+ return;
+ }
+ TokenHierarchy<?> th = request.info.getSnapshot().getTokenHierarchy();
+ TokenSequence<PHPTokenId> tokenSequence =
LexUtilities.getPHPTokenSequence(th, request.anchor);
+ if (tokenSequence == null) {
+ return;
+ }
+ Token<? extends PHPTokenId> constructorTypeName =
CompletionContextFinder.findFunctionInvocationName(tokenSequence,
request.anchor);
+ if (constructorTypeName != null) {
+ Model model = request.result.getModel();
+ NamespaceScope namespaceScope =
ModelUtils.getNamespaceScope(model.getFileScope(), request.anchor);
+ String fqTypeName =
VariousUtils.qualifyTypeNames(constructorTypeName.text().toString(),
request.anchor, namespaceScope);
+ Set<AliasedName> aliasedNames = ModelUtils.getAliasedNames(model,
request.anchor);
+ Set<MethodElement> constructors =
request.index.getConstructors(NameKind.exact(fqTypeName), aliasedNames,
Trait.ALIAS);
+ Set<String> duplicateCheck = new HashSet<>();
+ for (MethodElement constructor : constructors) {
+ if (CancelSupport.getDefault().isCancelled()) {
+ return;
+ }
+ addParameterNameItems(completionResult, request,
constructor.getParameters(), duplicateCheck);
+ }
+ }
+ }
+
private void autoCompleteClassMethodParameterName(
final PHPCompletionResult completionResult,
PHPCompletionItem.CompletionRequest request,
@@ -1685,6 +1716,7 @@ public class PHPCodeCompletion implements
CodeCompletionHandler2 {
accessibleTypeMembers.addAll(request.index.getAccessibleMixinTypeMembers(typeScope,
enclosingType));
}
}
+ Set<String> duplicateCheck = new HashSet<>();
for (final PhpElement phpElement : accessibleTypeMembers) {
if (CancelSupport.getDefault().isCancelled()) {
return;
@@ -1692,19 +1724,7 @@ public class PHPCodeCompletion implements
CodeCompletionHandler2 {
if (duplicateElementCheck.add(phpElement)) {
if (methodsFilter.isAccepted(phpElement)) {
MethodElement method = (MethodElement)
phpElement;
- for (ParameterElement parameter :
method.getParameters()) {
- if
(CancelSupport.getDefault().isCancelled()) {
- return;
- }
- String name = parameter.getName();
- if (name != null) {
- name = name.substring(1);
- }
- if (name != null
- &&
name.startsWith(request.prefix)) {
- completionResult.add(new
PHPCompletionItem.ParameterNameItem(parameter, request));
- }
- }
+ addParameterNameItems(completionResult,
request, method.getParameters(), duplicateCheck);
}
}
}
@@ -1739,25 +1759,30 @@ public class PHPCodeCompletion implements
CodeCompletionHandler2 {
if (functionElement.isAnonymous()) {
continue;
}
- for (ParameterElement parameter :
functionElement.getParameters()) {
- if (CancelSupport.getDefault().isCancelled()) {
- return;
- }
- String name = parameter.getName();
- if (name != null) {
- name = name.substring(1);
- }
- if (name != null
- && name.startsWith(request.prefix)
- && duplicateCheck.add(name)) {
- completionResult.add(new
PHPCompletionItem.ParameterNameItem(parameter, request));
- }
- }
+ addParameterNameItems(completionResult, request,
functionElement.getParameters(), duplicateCheck);
}
}
}
}
+ private void addParameterNameItems(final PHPCompletionResult
completionResult, final PHPCompletionItem.CompletionRequest request,
+ List<ParameterElement> parameters, Set<String> duplicateCheck) {
+ for (ParameterElement parameter : parameters) {
+ if (CancelSupport.getDefault().isCancelled()) {
+ return;
+ }
+ String name = parameter.getName();
+ if (!StringUtils.isEmpty(name)) {
+ name = name.substring(1);
+ }
+ if (!StringUtils.isEmpty(name)
+ && name.startsWith(request.prefix)
+ && duplicateCheck.add(name)) {
+ completionResult.add(new
PHPCompletionItem.ParameterNameItem(parameter, request));
+ }
+ }
+ }
+
private void autoCompleteClassConstants(final PHPCompletionResult
completionResult, final PHPCompletionItem.CompletionRequest request) {
// NETBANS-1855
// complete access prefix i.e. add "self::" to the top of constant
names
diff --git
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java
index 48eec495b1..89c5bd2737 100644
---
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java
+++
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java
@@ -408,6 +408,31 @@ public abstract class PHPCompletionItem implements
CompletionProposal {
return null;
}
+ public static boolean insertOnlyParameterName(CompletionRequest request) {
+ boolean result = false;
+ TokenHierarchy<?> tokenHierarchy =
request.result.getSnapshot().getTokenHierarchy();
+ TokenSequence<PHPTokenId> tokenSequence = (TokenSequence<PHPTokenId>)
tokenHierarchy.tokenSequence();
+ if (tokenSequence != null) {
+ tokenSequence.move(request.anchor);
+ // na^me: -> only parameter name
+ // n^ age: -> add also ":"
+ while (tokenSequence.moveNext()) {
+ Token<PHPTokenId> token = tokenSequence.token();
+ PHPTokenId id = token.id();
+ if (id == PHPTokenId.PHP_STRING) {
+ continue;
+ }
+ if (id == PHPTokenId.PHP_TOKEN
+ && TokenUtilities.textEquals(token.text(), ":")) { //
NOI18N
+ result = true;
+ break;
+ }
+ break;
+ }
+ }
+ return result;
+ }
+
public static boolean insertOnlyMethodsName(CompletionRequest request) {
if (request.insertOnlyMethodsName != null) {
return request.insertOnlyMethodsName;
@@ -2048,7 +2073,11 @@ public abstract class PHPCompletionItem implements
CompletionProposal {
@Override
public String getName() {
- return parameterElement.getName().substring(1) + ":"; // NOI18N
+ return getParameterName() + ":"; // NOI18N
+ }
+
+ private String getParameterName() {
+ return parameterElement.getName().substring(1);
}
@Override
@@ -2091,6 +2120,12 @@ public abstract class PHPCompletionItem implements
CompletionProposal {
@Override
public String getCustomInsertTemplate() {
+ if (insertOnlyParameterName(request)) {
+ // ^maxLength: (^: caret)
+ // we are unsure whether a user expects to add or override an
item in this context
+ // so, just add a name (i.e. don't add ":")
+ return getParameterName();
+ }
return getName() + " "; // NOI18N
}
}
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php
new file mode 100644
index 0000000000..c560e0cb5e
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+ public function __construct(int $param1, int|array|null $array, $default =
"default") {
+ }
+}
+
+$instance = new NamedArguments();
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php.testNamedArgumentsConstructor01.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php.testNamedArgumentsConstructor01.completion
new file mode 100644
index 0000000000..278fd6b214
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php.testNamedArgumentsConstructor01.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(|);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS NamedArguments [PUBLIC]
namedArgumentsConstructor01.php
+VARIABLE NamedArguments $instance [PUBLIC]
namedArgumentsConstructor01.php
+PARAMETER array: Parameter Name
+PARAMETER default: Parameter Name
+PARAMETER param1: Parameter Name
+------------------------------------
+VARIABLE $GLOBALS PHP Platform
+VARIABLE $HTTP_RAW_POST_DATA PHP Platform
+VARIABLE $_COOKIE PHP Platform
+VARIABLE $_ENV PHP Platform
+VARIABLE $_FILES PHP Platform
+VARIABLE $_GET PHP Platform
+VARIABLE $_POST PHP Platform
+VARIABLE $_REQUEST PHP Platform
+VARIABLE $_SERVER PHP Platform
+VARIABLE $_SESSION PHP Platform
+VARIABLE $argc PHP Platform
+VARIABLE $argv PHP Platform
+VARIABLE $http_response_header PHP Platform
+VARIABLE $php_errormsg PHP Platform
+KEYWORD abstract null
+KEYWORD and null
+KEYWORD array null
+KEYWORD as null
+KEYWORD break null
+KEYWORD case null
+KEYWORD catch null
+KEYWORD class null
+KEYWORD clone null
+KEYWORD const null
+KEYWORD continue null
+KEYWORD declare null
+KEYWORD default null
+KEYWORD die() Language Construct
+KEYWORD do null
+KEYWORD echo ''; Language Construct
+KEYWORD else null
+KEYWORD elseif null
+KEYWORD empty() Language Construct
+KEYWORD enddeclare null
+KEYWORD endfor null
+KEYWORD endforeach null
+KEYWORD endif null
+KEYWORD endswitch null
+KEYWORD endwhile null
+KEYWORD enum null
+KEYWORD eval() Language Construct
+KEYWORD exit() Language Construct
+KEYWORD extends null
+KEYWORD final null
+KEYWORD finally null
+KEYWORD fn null
+KEYWORD for null
+KEYWORD foreach null
+KEYWORD function null
+KEYWORD global null
+KEYWORD goto null
+KEYWORD if null
+KEYWORD implements null
+KEYWORD include ''; Language Construct
+KEYWORD include_once ''; Language Construct
+KEYWORD instanceof null
+KEYWORD interface null
+KEYWORD isset() Language Construct
+KEYWORD list() Language Construct
+KEYWORD match null
+KEYWORD namespace null
+KEYWORD new null
+KEYWORD or null
+KEYWORD print ''; Language Construct
+KEYWORD private null
+KEYWORD protected null
+KEYWORD public null
+KEYWORD readonly null
+KEYWORD require ''; Language Construct
+KEYWORD require_once ''; Language Construct
+KEYWORD return ; Language Construct
+KEYWORD static null
+KEYWORD switch null
+KEYWORD throw null
+KEYWORD trait null
+KEYWORD try null
+KEYWORD unset() Language Construct
+KEYWORD use null
+KEYWORD var null
+KEYWORD while null
+KEYWORD xor null
+KEYWORD yield null
+KEYWORD yield from null
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php
new file mode 100644
index 0000000000..1934835bd6
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+ public function __construct(int $param1, int|array|null $array, $default =
"default") {
+ }
+}
+
+$instance = new NamedArguments(arr);
+$instance = new NamedArguments()
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_a.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_a.completion
new file mode 100644
index 0000000000..b541a3919c
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_a.completion
@@ -0,0 +1,6 @@
+Code completion result for source line:
+$instance = new NamedArguments(arr|);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+PARAMETER array: Parameter Name
+------------------------------------
+KEYWORD array null
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_b.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_b.completion
new file mode 100644
index 0000000000..e0c23761e7
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_b.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(|)
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS NamedArguments [PUBLIC]
namedArgumentsConstructor02.php
+VARIABLE NamedArguments $instance [PUBLIC]
namedArgumentsConstructor02.php
+PARAMETER array: Parameter Name
+PARAMETER default: Parameter Name
+PARAMETER param1: Parameter Name
+------------------------------------
+VARIABLE $GLOBALS PHP Platform
+VARIABLE $HTTP_RAW_POST_DATA PHP Platform
+VARIABLE $_COOKIE PHP Platform
+VARIABLE $_ENV PHP Platform
+VARIABLE $_FILES PHP Platform
+VARIABLE $_GET PHP Platform
+VARIABLE $_POST PHP Platform
+VARIABLE $_REQUEST PHP Platform
+VARIABLE $_SERVER PHP Platform
+VARIABLE $_SESSION PHP Platform
+VARIABLE $argc PHP Platform
+VARIABLE $argv PHP Platform
+VARIABLE $http_response_header PHP Platform
+VARIABLE $php_errormsg PHP Platform
+KEYWORD abstract null
+KEYWORD and null
+KEYWORD array null
+KEYWORD as null
+KEYWORD break null
+KEYWORD case null
+KEYWORD catch null
+KEYWORD class null
+KEYWORD clone null
+KEYWORD const null
+KEYWORD continue null
+KEYWORD declare null
+KEYWORD default null
+KEYWORD die() Language Construct
+KEYWORD do null
+KEYWORD echo ''; Language Construct
+KEYWORD else null
+KEYWORD elseif null
+KEYWORD empty() Language Construct
+KEYWORD enddeclare null
+KEYWORD endfor null
+KEYWORD endforeach null
+KEYWORD endif null
+KEYWORD endswitch null
+KEYWORD endwhile null
+KEYWORD enum null
+KEYWORD eval() Language Construct
+KEYWORD exit() Language Construct
+KEYWORD extends null
+KEYWORD final null
+KEYWORD finally null
+KEYWORD fn null
+KEYWORD for null
+KEYWORD foreach null
+KEYWORD function null
+KEYWORD global null
+KEYWORD goto null
+KEYWORD if null
+KEYWORD implements null
+KEYWORD include ''; Language Construct
+KEYWORD include_once ''; Language Construct
+KEYWORD instanceof null
+KEYWORD interface null
+KEYWORD isset() Language Construct
+KEYWORD list() Language Construct
+KEYWORD match null
+KEYWORD namespace null
+KEYWORD new null
+KEYWORD or null
+KEYWORD print ''; Language Construct
+KEYWORD private null
+KEYWORD protected null
+KEYWORD public null
+KEYWORD readonly null
+KEYWORD require ''; Language Construct
+KEYWORD require_once ''; Language Construct
+KEYWORD return ; Language Construct
+KEYWORD static null
+KEYWORD switch null
+KEYWORD throw null
+KEYWORD trait null
+KEYWORD try null
+KEYWORD unset() Language Construct
+KEYWORD use null
+KEYWORD var null
+KEYWORD while null
+KEYWORD xor null
+KEYWORD yield null
+KEYWORD yield from null
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php
new file mode 100644
index 0000000000..4e8fa0c991
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+ public function __construct(int $param1, int|array|null $array, $default =
"default") {
+ }
+}
+
+$instance = new NamedArguments(1, );
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php.testNamedArgumentsConstructor03.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php.testNamedArgumentsConstructor03.completion
new file mode 100644
index 0000000000..5fdd60d3d7
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php.testNamedArgumentsConstructor03.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(1, |);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS NamedArguments [PUBLIC]
namedArgumentsConstructor03.php
+VARIABLE NamedArguments $instance [PUBLIC]
namedArgumentsConstructor03.php
+PARAMETER array: Parameter Name
+PARAMETER default: Parameter Name
+PARAMETER param1: Parameter Name
+------------------------------------
+VARIABLE $GLOBALS PHP Platform
+VARIABLE $HTTP_RAW_POST_DATA PHP Platform
+VARIABLE $_COOKIE PHP Platform
+VARIABLE $_ENV PHP Platform
+VARIABLE $_FILES PHP Platform
+VARIABLE $_GET PHP Platform
+VARIABLE $_POST PHP Platform
+VARIABLE $_REQUEST PHP Platform
+VARIABLE $_SERVER PHP Platform
+VARIABLE $_SESSION PHP Platform
+VARIABLE $argc PHP Platform
+VARIABLE $argv PHP Platform
+VARIABLE $http_response_header PHP Platform
+VARIABLE $php_errormsg PHP Platform
+KEYWORD abstract null
+KEYWORD and null
+KEYWORD array null
+KEYWORD as null
+KEYWORD break null
+KEYWORD case null
+KEYWORD catch null
+KEYWORD class null
+KEYWORD clone null
+KEYWORD const null
+KEYWORD continue null
+KEYWORD declare null
+KEYWORD default null
+KEYWORD die() Language Construct
+KEYWORD do null
+KEYWORD echo ''; Language Construct
+KEYWORD else null
+KEYWORD elseif null
+KEYWORD empty() Language Construct
+KEYWORD enddeclare null
+KEYWORD endfor null
+KEYWORD endforeach null
+KEYWORD endif null
+KEYWORD endswitch null
+KEYWORD endwhile null
+KEYWORD enum null
+KEYWORD eval() Language Construct
+KEYWORD exit() Language Construct
+KEYWORD extends null
+KEYWORD final null
+KEYWORD finally null
+KEYWORD fn null
+KEYWORD for null
+KEYWORD foreach null
+KEYWORD function null
+KEYWORD global null
+KEYWORD goto null
+KEYWORD if null
+KEYWORD implements null
+KEYWORD include ''; Language Construct
+KEYWORD include_once ''; Language Construct
+KEYWORD instanceof null
+KEYWORD interface null
+KEYWORD isset() Language Construct
+KEYWORD list() Language Construct
+KEYWORD match null
+KEYWORD namespace null
+KEYWORD new null
+KEYWORD or null
+KEYWORD print ''; Language Construct
+KEYWORD private null
+KEYWORD protected null
+KEYWORD public null
+KEYWORD readonly null
+KEYWORD require ''; Language Construct
+KEYWORD require_once ''; Language Construct
+KEYWORD return ; Language Construct
+KEYWORD static null
+KEYWORD switch null
+KEYWORD throw null
+KEYWORD trait null
+KEYWORD try null
+KEYWORD unset() Language Construct
+KEYWORD use null
+KEYWORD var null
+KEYWORD while null
+KEYWORD xor null
+KEYWORD yield null
+KEYWORD yield from null
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php
new file mode 100644
index 0000000000..2d3128f220
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+ public function __construct(int $param1, int|array|null $array, $default =
"default") {
+ }
+}
+
+$instance = new NamedArguments(1, defa);
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php.testNamedArgumentsConstructor04.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php.testNamedArgumentsConstructor04.completion
new file mode 100644
index 0000000000..166c8e9cf5
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php.testNamedArgumentsConstructor04.completion
@@ -0,0 +1,6 @@
+Code completion result for source line:
+$instance = new NamedArguments(1, defa|);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+PARAMETER default: Parameter Name
+------------------------------------
+KEYWORD default null
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php
new file mode 100644
index 0000000000..a703afa960
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+ public function __construct(int $param1, int|array|null $array, $default =
"default") {
+ }
+}
+
+$instance = new NamedArguments(param1: 1, default: "test");
+$instance = new NamedArguments(param1: 1, arrdefault: "test");
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template01.cccustomtpl
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template01.cccustomtpl
new file mode 100644
index 0000000000..a3c8bf98d7
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template01.cccustomtpl
@@ -0,0 +1,2 @@
+Name: array:
+array
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template02.cccustomtpl
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template02.cccustomtpl
new file mode 100644
index 0000000000..c097b8da38
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template02.cccustomtpl
@@ -0,0 +1,2 @@
+Name: array:
+array:
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_a.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_a.completion
new file mode 100644
index 0000000000..592ed924b1
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_a.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(param1: 1,| default: "test");
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS NamedArguments [PUBLIC]
namedArgumentsConstructor05.php
+VARIABLE NamedArguments $instance [PUBLIC]
namedArgumentsConstructor05.php
+PARAMETER array: Parameter Name
+PARAMETER default: Parameter Name
+PARAMETER param1: Parameter Name
+------------------------------------
+VARIABLE $GLOBALS PHP Platform
+VARIABLE $HTTP_RAW_POST_DATA PHP Platform
+VARIABLE $_COOKIE PHP Platform
+VARIABLE $_ENV PHP Platform
+VARIABLE $_FILES PHP Platform
+VARIABLE $_GET PHP Platform
+VARIABLE $_POST PHP Platform
+VARIABLE $_REQUEST PHP Platform
+VARIABLE $_SERVER PHP Platform
+VARIABLE $_SESSION PHP Platform
+VARIABLE $argc PHP Platform
+VARIABLE $argv PHP Platform
+VARIABLE $http_response_header PHP Platform
+VARIABLE $php_errormsg PHP Platform
+KEYWORD abstract null
+KEYWORD and null
+KEYWORD array null
+KEYWORD as null
+KEYWORD break null
+KEYWORD case null
+KEYWORD catch null
+KEYWORD class null
+KEYWORD clone null
+KEYWORD const null
+KEYWORD continue null
+KEYWORD declare null
+KEYWORD default null
+KEYWORD die() Language Construct
+KEYWORD do null
+KEYWORD echo ''; Language Construct
+KEYWORD else null
+KEYWORD elseif null
+KEYWORD empty() Language Construct
+KEYWORD enddeclare null
+KEYWORD endfor null
+KEYWORD endforeach null
+KEYWORD endif null
+KEYWORD endswitch null
+KEYWORD endwhile null
+KEYWORD enum null
+KEYWORD eval() Language Construct
+KEYWORD exit() Language Construct
+KEYWORD extends null
+KEYWORD final null
+KEYWORD finally null
+KEYWORD fn null
+KEYWORD for null
+KEYWORD foreach null
+KEYWORD function null
+KEYWORD global null
+KEYWORD goto null
+KEYWORD if null
+KEYWORD implements null
+KEYWORD include ''; Language Construct
+KEYWORD include_once ''; Language Construct
+KEYWORD instanceof null
+KEYWORD interface null
+KEYWORD isset() Language Construct
+KEYWORD list() Language Construct
+KEYWORD match null
+KEYWORD namespace null
+KEYWORD new null
+KEYWORD or null
+KEYWORD print ''; Language Construct
+KEYWORD private null
+KEYWORD protected null
+KEYWORD public null
+KEYWORD readonly null
+KEYWORD require ''; Language Construct
+KEYWORD require_once ''; Language Construct
+KEYWORD return ; Language Construct
+KEYWORD static null
+KEYWORD switch null
+KEYWORD throw null
+KEYWORD trait null
+KEYWORD try null
+KEYWORD unset() Language Construct
+KEYWORD use null
+KEYWORD var null
+KEYWORD while null
+KEYWORD xor null
+KEYWORD yield null
+KEYWORD yield from null
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_b.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_b.completion
new file mode 100644
index 0000000000..bc2dc9805c
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_b.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(param1: 1, |default: "test");
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS NamedArguments [PUBLIC]
namedArgumentsConstructor05.php
+VARIABLE NamedArguments $instance [PUBLIC]
namedArgumentsConstructor05.php
+PARAMETER array: Parameter Name
+PARAMETER default: Parameter Name
+PARAMETER param1: Parameter Name
+------------------------------------
+VARIABLE $GLOBALS PHP Platform
+VARIABLE $HTTP_RAW_POST_DATA PHP Platform
+VARIABLE $_COOKIE PHP Platform
+VARIABLE $_ENV PHP Platform
+VARIABLE $_FILES PHP Platform
+VARIABLE $_GET PHP Platform
+VARIABLE $_POST PHP Platform
+VARIABLE $_REQUEST PHP Platform
+VARIABLE $_SERVER PHP Platform
+VARIABLE $_SESSION PHP Platform
+VARIABLE $argc PHP Platform
+VARIABLE $argv PHP Platform
+VARIABLE $http_response_header PHP Platform
+VARIABLE $php_errormsg PHP Platform
+KEYWORD abstract null
+KEYWORD and null
+KEYWORD array null
+KEYWORD as null
+KEYWORD break null
+KEYWORD case null
+KEYWORD catch null
+KEYWORD class null
+KEYWORD clone null
+KEYWORD const null
+KEYWORD continue null
+KEYWORD declare null
+KEYWORD default null
+KEYWORD die() Language Construct
+KEYWORD do null
+KEYWORD echo ''; Language Construct
+KEYWORD else null
+KEYWORD elseif null
+KEYWORD empty() Language Construct
+KEYWORD enddeclare null
+KEYWORD endfor null
+KEYWORD endforeach null
+KEYWORD endif null
+KEYWORD endswitch null
+KEYWORD endwhile null
+KEYWORD enum null
+KEYWORD eval() Language Construct
+KEYWORD exit() Language Construct
+KEYWORD extends null
+KEYWORD final null
+KEYWORD finally null
+KEYWORD fn null
+KEYWORD for null
+KEYWORD foreach null
+KEYWORD function null
+KEYWORD global null
+KEYWORD goto null
+KEYWORD if null
+KEYWORD implements null
+KEYWORD include ''; Language Construct
+KEYWORD include_once ''; Language Construct
+KEYWORD instanceof null
+KEYWORD interface null
+KEYWORD isset() Language Construct
+KEYWORD list() Language Construct
+KEYWORD match null
+KEYWORD namespace null
+KEYWORD new null
+KEYWORD or null
+KEYWORD print ''; Language Construct
+KEYWORD private null
+KEYWORD protected null
+KEYWORD public null
+KEYWORD readonly null
+KEYWORD require ''; Language Construct
+KEYWORD require_once ''; Language Construct
+KEYWORD return ; Language Construct
+KEYWORD static null
+KEYWORD switch null
+KEYWORD throw null
+KEYWORD trait null
+KEYWORD try null
+KEYWORD unset() Language Construct
+KEYWORD use null
+KEYWORD var null
+KEYWORD while null
+KEYWORD xor null
+KEYWORD yield null
+KEYWORD yield from null
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_c.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_c.completion
new file mode 100644
index 0000000000..181826df37
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_c.completion
@@ -0,0 +1,6 @@
+Code completion result for source line:
+$instance = new NamedArguments(param1: 1, arr|default: "test");
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+PARAMETER array: Parameter Name
+------------------------------------
+KEYWORD array null
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php
new file mode 100644
index 0000000000..5a05bfecac
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+namespace Test1;
+
+class NamedArguments {
+ public function __construct(int $param1, int|array|null $array, $default =
"default") {
+ }
+}
+
+namespace Test2;
+
+use Test1\NamedArguments;
+
+$test = "test";
+$int = 1;
+$instance = new NamedArguments();
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php.testNamedArgumentsConstructor06.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php.testNamedArgumentsConstructor06.completion
new file mode 100644
index 0000000000..d17c01ae6d
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php.testNamedArgumentsConstructor06.completion
@@ -0,0 +1,96 @@
+Code completion result for source line:
+$instance = new NamedArguments(|);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+PACKAGE Test1 [PUBLIC] null
+PACKAGE Test2 [PUBLIC] null
+CLASS NamedArguments [PUBLIC] Test1
+VARIABLE \Test1\NamedArguments $instanc [PUBLIC]
namedArgumentsConstructor06.php
+VARIABLE int $int [PUBLIC]
namedArgumentsConstructor06.php
+VARIABLE string $test [PUBLIC]
namedArgumentsConstructor06.php
+PARAMETER array: Parameter Name
+PARAMETER default: Parameter Name
+PARAMETER param1: Parameter Name
+------------------------------------
+VARIABLE $GLOBALS PHP Platform
+VARIABLE $HTTP_RAW_POST_DATA PHP Platform
+VARIABLE $_COOKIE PHP Platform
+VARIABLE $_ENV PHP Platform
+VARIABLE $_FILES PHP Platform
+VARIABLE $_GET PHP Platform
+VARIABLE $_POST PHP Platform
+VARIABLE $_REQUEST PHP Platform
+VARIABLE $_SERVER PHP Platform
+VARIABLE $_SESSION PHP Platform
+VARIABLE $argc PHP Platform
+VARIABLE $argv PHP Platform
+VARIABLE $http_response_header PHP Platform
+VARIABLE $php_errormsg PHP Platform
+KEYWORD abstract null
+KEYWORD and null
+KEYWORD array null
+KEYWORD as null
+KEYWORD break null
+KEYWORD case null
+KEYWORD catch null
+KEYWORD class null
+KEYWORD clone null
+KEYWORD const null
+KEYWORD continue null
+KEYWORD declare null
+KEYWORD default null
+KEYWORD die() Language Construct
+KEYWORD do null
+KEYWORD echo ''; Language Construct
+KEYWORD else null
+KEYWORD elseif null
+KEYWORD empty() Language Construct
+KEYWORD enddeclare null
+KEYWORD endfor null
+KEYWORD endforeach null
+KEYWORD endif null
+KEYWORD endswitch null
+KEYWORD endwhile null
+KEYWORD enum null
+KEYWORD eval() Language Construct
+KEYWORD exit() Language Construct
+KEYWORD extends null
+KEYWORD final null
+KEYWORD finally null
+KEYWORD fn null
+KEYWORD for null
+KEYWORD foreach null
+KEYWORD function null
+KEYWORD global null
+KEYWORD goto null
+KEYWORD if null
+KEYWORD implements null
+KEYWORD include ''; Language Construct
+KEYWORD include_once ''; Language Construct
+KEYWORD instanceof null
+KEYWORD interface null
+KEYWORD isset() Language Construct
+KEYWORD list() Language Construct
+KEYWORD match null
+KEYWORD namespace null
+KEYWORD new null
+KEYWORD or null
+KEYWORD print ''; Language Construct
+KEYWORD private null
+KEYWORD protected null
+KEYWORD public null
+KEYWORD readonly null
+KEYWORD require ''; Language Construct
+KEYWORD require_once ''; Language Construct
+KEYWORD return ; Language Construct
+KEYWORD static null
+KEYWORD switch null
+KEYWORD throw null
+KEYWORD trait null
+KEYWORD try null
+KEYWORD unset() Language Construct
+KEYWORD use null
+KEYWORD var null
+KEYWORD while null
+KEYWORD xor null
+KEYWORD yield null
+KEYWORD yield from null
diff --git
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP80CodeCompletionTest.java
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP80CodeCompletionTest.java
index 35a4afe83f..8622a5046b 100644
---
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP80CodeCompletionTest.java
+++
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP80CodeCompletionTest.java
@@ -1137,6 +1137,52 @@ public class PHP80CodeCompletionTest extends
PHPCodeCompletionTestBase {
checkCompletion(getTestPath("namedArgumentsStaticMethod06"),
"self::test(^)", false);
}
+ public void testNamedArgumentsConstructor01() throws Exception {
+ checkCompletion(getTestPath("namedArgumentsConstructor01"), "$instance
= new NamedArguments(^);", false);
+ }
+
+ public void testNamedArgumentsConstructor02_a() throws Exception {
+ checkCompletion(getTestPath("namedArgumentsConstructor02"), "$instance
= new NamedArguments(arr^);", false);
+ }
+
+ public void testNamedArgumentsConstructor02_b() throws Exception {
+ checkCompletion(getTestPath("namedArgumentsConstructor02"), "$instance
= new NamedArguments(^)", false);
+ }
+
+ public void testNamedArgumentsConstructor03() throws Exception {
+ checkCompletion(getTestPath("namedArgumentsConstructor03"), "$instance
= new NamedArguments(1, ^);", false);
+ }
+
+ public void testNamedArgumentsConstructor04() throws Exception {
+ checkCompletion(getTestPath("namedArgumentsConstructor04"), "$instance
= new NamedArguments(1, defa^);", false);
+ }
+
+ public void testNamedArgumentsConstructor05_a() throws Exception {
+ checkCompletion(getTestPath("namedArgumentsConstructor05"), "$instance
= new NamedArguments(param1: 1,^ default: \"test\");", false);
+ }
+
+ public void testNamedArgumentsConstructor05_b() throws Exception {
+ checkCompletion(getTestPath("namedArgumentsConstructor05"), "$instance
= new NamedArguments(param1: 1, ^default: \"test\");", false);
+ }
+
+ public void testNamedArgumentsConstructor05_c() throws Exception {
+ checkCompletion(getTestPath("namedArgumentsConstructor05"), "$instance
= new NamedArguments(param1: 1, arr^default: \"test\");", false);
+ }
+
+ public void testNamedArgumentsConstructor05_Template01() throws Exception {
+
checkCompletionCustomTemplateResult(getTestPath("namedArgumentsConstructor05"),
"$instance = new NamedArguments(param1: 1, arr^default: \"test\");",
+ new DefaultFilter("array"), true);
+ }
+
+ public void testNamedArgumentsConstructor05_Template02() throws Exception {
+
checkCompletionCustomTemplateResult(getTestPath("namedArgumentsConstructor05"),
"$instance = new NamedArguments(param1: 1,^ default: \"test\");",
+ new DefaultFilter("array"), true);
+ }
+
+ public void testNamedArgumentsConstructor06() throws Exception {
+ checkCompletion(getTestPath("namedArgumentsConstructor06"), "$instance
= new NamedArguments(^);", false);
+ }
+
public void testStaticReturnTypeOverrideMethod01() throws Exception {
checkCompletionCustomTemplateResult(getTestPath("testStaticReturnTypeOverrideMethod01"),
" test^",
new DefaultFilter(PhpVersion.PHP_80, "test"), true);
diff --git
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java
index ad87a3cdbc..5d8256ccca 100644
---
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java
+++
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java
@@ -213,6 +213,11 @@ public abstract class PHPCodeCompletionTestBase extends
PHPTestBase {
this.prefix = prefix;
}
+ public DefaultFilter(String prefix) {
+ this.phpVersion = PhpVersion.getDefault();
+ this.prefix = prefix;
+ }
+
@Override
public boolean accept(CompletionProposal proposal) {
if (proposal instanceof PHPCompletionItem.MethodDeclarationItem) {
@@ -223,6 +228,14 @@ public abstract class PHPCodeCompletionTestBase extends
PHPTestBase {
return true;
}
}
+ if (proposal instanceof PHPCompletionItem.KeywordItem) {
+ // ignore KeywordItem because it invokes
EditorRegistry.lastFocusedComponent().getDocument() (NPE)
+ return false;
+ }
+ if (proposal != null) {
+ String name = proposal.getName();
+ return name.startsWith(prefix);
+ }
return false;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists