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 5f687eb28c Fix the formatting for the method call arguments alignment 
option #6714
     new f4da2b4df3 Merge pull request #6877 from 
junichi11/php-gh-6714-formatting-for-alignment
5f687eb28c is described below

commit 5f687eb28c5b46baf961bc0e6c33718c6cbfc400
Author: Junichi Yamamoto <junich...@apache.org>
AuthorDate: Sun Dec 24 19:00:22 2023 +0900

    Fix the formatting for the method call arguments alignment option #6714
    
    - https://github.com/apache/netbeans/issues/6714
    - Consider the TAB size when a column size is got
    
    Example:
    ```php
    array_merge(
            $x,
            $y,
    );
    ```
    
    Before:
    
    ```php
    array_merge(
            $x,
     $y,
    );
    ```
    
    After:
    
    ```php
    array_merge(
            $x,
            $y,
    );
    ```
    
    - Keep the last anchor to a stack when a method calls are nested
    
    Example:
    
    ```php
    nestedCall(
            something(
                                    $arg1,
                            $arg2,
                    C::something(
                                            $x,
                                            $y,
                                    $z,
                    )
            ),
                            $y,
                    $z,
    );
    ```
    
    Before:
    
    ```php
    nestedCall(
            something(
                    $arg1,
      $arg2,
      C::something(
                            $x,
       $y,
       $z,
                    )
            ),
       $y,
       $z,
    );
    ```
    
    After:
    
    ```php
    nestedCall(
            something(
                    $arg1,
                    $arg2,
                    C::something(
                            $x,
                            $y,
                            $z,
                    )
            ),
            $y,
            $z,
    );
    ```
    
    - Add unit tests
---
 .../modules/php/editor/indent/TokenFormatter.java  |  29 ++++--
 .../testfiles/formatting/alignment/gh6714_01.php   |  84 +++++++++++++++++
 ...h6714_01.php.testGH6714WithSpaces_01a.formatted |  84 +++++++++++++++++
 ...h6714_01.php.testGH6714WithSpaces_01b.formatted |  84 +++++++++++++++++
 .../gh6714_01.php.testGH6714WithTab_01a.formatted  |  84 +++++++++++++++++
 .../gh6714_01.php.testGH6714WithTab_01b.formatted  |  84 +++++++++++++++++
 .../testfiles/formatting/alignment/gh6714_02.php   |  84 +++++++++++++++++
 ...h6714_02.php.testGH6714WithSpaces_02a.formatted |  84 +++++++++++++++++
 ...h6714_02.php.testGH6714WithSpaces_02b.formatted |  84 +++++++++++++++++
 .../gh6714_02.php.testGH6714WithTab_02a.formatted  |  84 +++++++++++++++++
 .../gh6714_02.php.testGH6714WithTab_02b.formatted  |  84 +++++++++++++++++
 .../editor/indent/PHPFormatterAlignmentTest.java   | 102 +++++++++++++++++++++
 12 files changed, 965 insertions(+), 6 deletions(-)

diff --git 
a/php/php.editor/src/org/netbeans/modules/php/editor/indent/TokenFormatter.java 
b/php/php.editor/src/org/netbeans/modules/php/editor/indent/TokenFormatter.java
index 4764316575..f834010651 100644
--- 
a/php/php.editor/src/org/netbeans/modules/php/editor/indent/TokenFormatter.java
+++ 
b/php/php.editor/src/org/netbeans/modules/php/editor/indent/TokenFormatter.java
@@ -36,6 +36,7 @@ import org.netbeans.editor.Utilities;
 import org.netbeans.modules.csl.spi.GsfUtilities;
 import org.netbeans.modules.csl.spi.ParserResult;
 import org.netbeans.modules.editor.indent.spi.Context;
+import org.netbeans.modules.php.editor.CodeUtils;
 import org.netbeans.modules.php.editor.lexer.LexUtilities;
 import org.netbeans.modules.php.editor.lexer.PHPTokenId;
 import org.netbeans.modules.php.editor.parser.PHPParseResult;
@@ -455,7 +456,9 @@ public class TokenFormatter {
                     int extraLines;
                     int column = 0;
                     int indentOfOpenTag = 0;
+                    int methodCallParenBalance = 0; // GH-6714 for nested 
arguments
                     final Deque<Integer> lastBracedBlockIndent = new 
ArrayDeque<>();
+                    final Deque<FormatToken.AnchorToken> lastAnchorTokenStack 
= new ArrayDeque<>(); // GH-6714 for nested arguments
 
                     FormatToken formatToken;
                     String newText = null;
@@ -1455,12 +1458,17 @@ public class TokenFormatter {
                                         }
                                         // NETBEANS-3391
                                         if (isLeftParen(formatTokens.get(index 
- 1))) {
+                                            methodCallParenBalance++;
                                             if 
(hasNewLineWithinParensForward(index, formatTokens, formatToken.getId())
                                                     && 
docOptions.wrapMethodCallArgsAfterLeftParen) {
                                                 indentLine = true;
                                                 newLines = 1;
                                             }
                                         } else {
+                                            methodCallParenBalance--;
+                                            if (methodCallParenBalance > 0 && 
!lastAnchorTokenStack.isEmpty()) {
+                                                lastAnchor = 
lastAnchorTokenStack.pop();
+                                            }
                                             if 
(hasNewLineWithinParensBackward(index, formatTokens, formatToken.getId())
                                                     && 
docOptions.wrapMethodCallArgsRightParen) {
                                                 indentLine = true;
@@ -1741,6 +1749,9 @@ public class TokenFormatter {
                                         lastPHPIndent += indentDelta;
                                         break;
                                     case ANCHOR:
+                                        if (methodCallParenBalance > 0 && 
lastAnchor != null) {
+                                            
lastAnchorTokenStack.push(lastAnchor);
+                                        }
                                         lastAnchor = (FormatToken.AnchorToken) 
formatToken;
                                         lastAnchor.setAnchorColumn(column + 1);
                                         break;
@@ -2156,6 +2167,9 @@ public class TokenFormatter {
                                     }
                                     break;
                                 case ANCHOR:
+                                    if (methodCallParenBalance > 0 && 
lastAnchor != null) {
+                                        lastAnchorTokenStack.push(lastAnchor);
+                                    }
                                     lastAnchor = (FormatToken.AnchorToken) 
formatToken;
                                     lastAnchor.setAnchorColumn(column);
                                     break;
@@ -2221,22 +2235,25 @@ public class TokenFormatter {
                         }
 
                         delta = replaceString(doc, changeOffset, index, 
oldText, newText, delta, templateEdit);
+                        // GH-6714 if text have TABs, get incorrect column
+                        // so, use countOfSpaces() instead of newText.length()
                         if (newText == null) {
-                            String formatTokenOldText = 
formatToken.getOldText() == null ? "" : formatToken.getOldText();
-                            int formatTokenOldTextLength = 
formatTokenOldText.length();
+                            String formatTokenOldText = 
formatToken.getOldText() == null ? CodeUtils.EMPTY_STRING : 
formatToken.getOldText();
+                            int formatTokenOldTextLength = 
countOfSpaces(formatTokenOldText, docOptions.tabSize);
                             int lines = countOfNewLines(formatTokenOldText);
                             if (lines > 0) {
-                                int lastNewLine = 
formatTokenOldText.lastIndexOf('\n'); //NOI18N
-                                column = 
formatTokenOldText.substring(lastNewLine).length();
+                                int lastNewLine = 
formatTokenOldText.lastIndexOf(CodeUtils.NEW_LINE);
+                                String substring = 
formatTokenOldText.substring(lastNewLine);
+                                column = countOfSpaces(substring, 
docOptions.tabSize);
                             } else {
                                 column += formatTokenOldTextLength;
                             }
                         } else {
                             int lines = countOfNewLines(newText);
                             if (lines > 0) {
-                                column = newText.length() - lines;
+                                column = countOfSpaces(newText, 
docOptions.tabSize) - lines;
                             } else {
-                                column += newText.length();
+                                column += countOfSpaces(newText, 
docOptions.tabSize);
                             }
                         }
                         newText = null;
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php
new file mode 100644
index 0000000000..360b299172
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\ {
+            function1,
+            function2,
+};
+use function Vendor\Package\ {
+            function3,
+            function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+Interface2,
+Interface3
+{
+       public array $x = [];
+       public array $y = [];
+
+       public function test1()
+       {
+               return something1(
+                       $this->x,
+   $this->y,
+               );
+       }
+
+       public function test2(
+  $param1,
+     $param2,
+    $param3,
+        )
+       {
+            nestedCall(
+                       $this->testMethod($arg1),
+$this->x,
+               $this->y,
+               );
+               return nestedCall(
+                       $this->testMethod($arg1),
+$this->x,
+               $this->y,
+               );
+       }
+}
+
+array_merge(
+       $x,
+$y,
+);
+
+nestedCall(
+       something(
+                               $arg1,
+                       $arg2,
+               C::something(
+                                       $x,
+                                       $y,
+                               $z,
+               )
+       ),
+                       $y,
+               $z,
+);
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithSpaces_01a.formatted
 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithSpaces_01a.formatted
new file mode 100644
index 0000000000..0138ecf071
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithSpaces_01a.formatted
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\{
+    function1,
+    function2,
+};
+use function Vendor\Package\{
+    function3,
+    function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+                        Interface2,
+                        Interface3 {
+
+    public array $x = [];
+    public array $y = [];
+
+    public function test1() {
+        return something1(
+            $this->x,
+            $this->y,
+        );
+    }
+
+    public function test2(
+        $param1,
+        $param2,
+        $param3,
+    ) {
+        nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+        return nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+    }
+}
+
+array_merge(
+    $x,
+    $y,
+);
+
+nestedCall(
+    something(
+        $arg1,
+        $arg2,
+        C::something(
+            $x,
+            $y,
+            $z,
+        )
+    ),
+    $y,
+    $z,
+);
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithSpaces_01b.formatted
 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithSpaces_01b.formatted
new file mode 100644
index 0000000000..0138ecf071
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithSpaces_01b.formatted
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\{
+    function1,
+    function2,
+};
+use function Vendor\Package\{
+    function3,
+    function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+                        Interface2,
+                        Interface3 {
+
+    public array $x = [];
+    public array $y = [];
+
+    public function test1() {
+        return something1(
+            $this->x,
+            $this->y,
+        );
+    }
+
+    public function test2(
+        $param1,
+        $param2,
+        $param3,
+    ) {
+        nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+        return nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+    }
+}
+
+array_merge(
+    $x,
+    $y,
+);
+
+nestedCall(
+    something(
+        $arg1,
+        $arg2,
+        C::something(
+            $x,
+            $y,
+            $z,
+        )
+    ),
+    $y,
+    $z,
+);
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithTab_01a.formatted
 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithTab_01a.formatted
new file mode 100644
index 0000000000..f2112b53b4
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithTab_01a.formatted
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\{
+       function1,
+       function2,
+};
+use function Vendor\Package\{
+       function3,
+       function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+                                               Interface2,
+                                               Interface3 {
+
+       public array $x = [];
+       public array $y = [];
+
+       public function test1() {
+               return something1(
+                       $this->x,
+                       $this->y,
+               );
+       }
+
+       public function test2(
+               $param1,
+               $param2,
+               $param3,
+       ) {
+               nestedCall(
+                       $this->testMethod($arg1),
+                       $this->x,
+                       $this->y,
+               );
+               return nestedCall(
+                       $this->testMethod($arg1),
+                       $this->x,
+                       $this->y,
+               );
+       }
+}
+
+array_merge(
+       $x,
+       $y,
+);
+
+nestedCall(
+       something(
+               $arg1,
+               $arg2,
+               C::something(
+                       $x,
+                       $y,
+                       $z,
+               )
+       ),
+       $y,
+       $z,
+);
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithTab_01b.formatted
 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithTab_01b.formatted
new file mode 100644
index 0000000000..f2112b53b4
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_01.php.testGH6714WithTab_01b.formatted
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\{
+       function1,
+       function2,
+};
+use function Vendor\Package\{
+       function3,
+       function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+                                               Interface2,
+                                               Interface3 {
+
+       public array $x = [];
+       public array $y = [];
+
+       public function test1() {
+               return something1(
+                       $this->x,
+                       $this->y,
+               );
+       }
+
+       public function test2(
+               $param1,
+               $param2,
+               $param3,
+       ) {
+               nestedCall(
+                       $this->testMethod($arg1),
+                       $this->x,
+                       $this->y,
+               );
+               return nestedCall(
+                       $this->testMethod($arg1),
+                       $this->x,
+                       $this->y,
+               );
+       }
+}
+
+array_merge(
+       $x,
+       $y,
+);
+
+nestedCall(
+       something(
+               $arg1,
+               $arg2,
+               C::something(
+                       $x,
+                       $y,
+                       $z,
+               )
+       ),
+       $y,
+       $z,
+);
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php
new file mode 100644
index 0000000000..06c0ef6ee2
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\ {
+            function1,
+            function2,
+};
+use function Vendor\Package\ {
+            function3,
+            function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+                        Interface2,
+                        Interface3 {
+
+    public array $x = [];
+    public array $y = [];
+
+    public function test1() {
+        return something1(
+            $this->x,
+            $this->y,
+        );
+    }
+
+    public function test2(
+        $param1,
+        $param2,
+        $param3,
+    ) {
+        nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+        return nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+    }
+}
+
+array_merge(
+    $x,
+    $y,
+);
+
+nestedCall(
+    something(
+        $arg1,
+        $arg2,
+        C::something(
+            $x,
+            $y,
+            $z,
+        )
+    ),
+    $y,
+    $z,
+);
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithSpaces_02a.formatted
 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithSpaces_02a.formatted
new file mode 100644
index 0000000000..0138ecf071
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithSpaces_02a.formatted
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\{
+    function1,
+    function2,
+};
+use function Vendor\Package\{
+    function3,
+    function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+                        Interface2,
+                        Interface3 {
+
+    public array $x = [];
+    public array $y = [];
+
+    public function test1() {
+        return something1(
+            $this->x,
+            $this->y,
+        );
+    }
+
+    public function test2(
+        $param1,
+        $param2,
+        $param3,
+    ) {
+        nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+        return nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+    }
+}
+
+array_merge(
+    $x,
+    $y,
+);
+
+nestedCall(
+    something(
+        $arg1,
+        $arg2,
+        C::something(
+            $x,
+            $y,
+            $z,
+        )
+    ),
+    $y,
+    $z,
+);
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithSpaces_02b.formatted
 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithSpaces_02b.formatted
new file mode 100644
index 0000000000..0138ecf071
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithSpaces_02b.formatted
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\{
+    function1,
+    function2,
+};
+use function Vendor\Package\{
+    function3,
+    function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+                        Interface2,
+                        Interface3 {
+
+    public array $x = [];
+    public array $y = [];
+
+    public function test1() {
+        return something1(
+            $this->x,
+            $this->y,
+        );
+    }
+
+    public function test2(
+        $param1,
+        $param2,
+        $param3,
+    ) {
+        nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+        return nestedCall(
+            $this->testMethod($arg1),
+            $this->x,
+            $this->y,
+        );
+    }
+}
+
+array_merge(
+    $x,
+    $y,
+);
+
+nestedCall(
+    something(
+        $arg1,
+        $arg2,
+        C::something(
+            $x,
+            $y,
+            $z,
+        )
+    ),
+    $y,
+    $z,
+);
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithTab_02a.formatted
 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithTab_02a.formatted
new file mode 100644
index 0000000000..f2112b53b4
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithTab_02a.formatted
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\{
+       function1,
+       function2,
+};
+use function Vendor\Package\{
+       function3,
+       function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+                                               Interface2,
+                                               Interface3 {
+
+       public array $x = [];
+       public array $y = [];
+
+       public function test1() {
+               return something1(
+                       $this->x,
+                       $this->y,
+               );
+       }
+
+       public function test2(
+               $param1,
+               $param2,
+               $param3,
+       ) {
+               nestedCall(
+                       $this->testMethod($arg1),
+                       $this->x,
+                       $this->y,
+               );
+               return nestedCall(
+                       $this->testMethod($arg1),
+                       $this->x,
+                       $this->y,
+               );
+       }
+}
+
+array_merge(
+       $x,
+       $y,
+);
+
+nestedCall(
+       something(
+               $arg1,
+               $arg2,
+               C::something(
+                       $x,
+                       $y,
+                       $z,
+               )
+       ),
+       $y,
+       $z,
+);
diff --git 
a/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithTab_02b.formatted
 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithTab_02b.formatted
new file mode 100644
index 0000000000..f2112b53b4
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/formatting/alignment/gh6714_02.php.testGH6714WithTab_02b.formatted
@@ -0,0 +1,84 @@
+<?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 NS\GH6714;
+
+use Vendor\Package\TestClass1;
+use function Vendor\Package\{
+       function1,
+       function2,
+};
+use function Vendor\Package\{
+       function3,
+       function4,
+};
+use const Vendor\Package\CONSTANT1;
+
+class GH6714 implements Interface1,
+                                               Interface2,
+                                               Interface3 {
+
+       public array $x = [];
+       public array $y = [];
+
+       public function test1() {
+               return something1(
+                       $this->x,
+                       $this->y,
+               );
+       }
+
+       public function test2(
+               $param1,
+               $param2,
+               $param3,
+       ) {
+               nestedCall(
+                       $this->testMethod($arg1),
+                       $this->x,
+                       $this->y,
+               );
+               return nestedCall(
+                       $this->testMethod($arg1),
+                       $this->x,
+                       $this->y,
+               );
+       }
+}
+
+array_merge(
+       $x,
+       $y,
+);
+
+nestedCall(
+       something(
+               $arg1,
+               $arg2,
+               C::something(
+                       $x,
+                       $y,
+                       $z,
+               )
+       ),
+       $y,
+       $z,
+);
diff --git 
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterAlignmentTest.java
 
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterAlignmentTest.java
index e135576775..bc8c50c985 100644
--- 
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterAlignmentTest.java
+++ 
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterAlignmentTest.java
@@ -26,10 +26,16 @@ import java.util.HashMap;
  */
 public class PHPFormatterAlignmentTest extends PHPFormatterTestBase {
 
+    private static final String TEST_DIRECTORY_PATH = 
"testfiles/formatting/alignment/";
+
     public PHPFormatterAlignmentTest(String testName) {
         super(testName);
     }
 
+    private String getTestFilePath(String fileName) {
+        return TEST_DIRECTORY_PATH + fileName;
+    }
+
     public void testAlignmentKeywords01() throws Exception {
         HashMap<String, Object> options = new HashMap<String, 
Object>(FmtOptions.getDefaults());
         options.put(FmtOptions.PLACE_WHILE_ON_NEW_LINE, true);
@@ -213,4 +219,100 @@ public class PHPFormatterAlignmentTest extends 
PHPFormatterTestBase {
         reformatFileContents("testfiles/formatting/alignment/issue244566.php", 
options);
     }
 
+    public void testGH6714WithTab_01a() throws Exception {
+        HashMap<String, Object> options = new 
HashMap<>(FmtOptions.getDefaults());
+        options.put(FmtOptions.ALIGN_MULTILINE_CALL_ARGS, true);
+        options.put(FmtOptions.ALIGN_MULTILINE_IMPLEMENTS, true);
+        options.put(FmtOptions.WRAP_EXTENDS_IMPLEMENTS_LIST, 
CodeStyle.WrapStyle.WRAP_ALWAYS);
+        options.put(FmtOptions.ALIGN_MULTILINE_METHOD_PARAMS, true);
+        options.put(FmtOptions.TAB_SIZE, 4);
+        options.put(FmtOptions.CONTINUATION_INDENT_SIZE, 4);
+        options.put(FmtOptions.EXPAND_TAB_TO_SPACES, false);
+        reformatFileContents(getTestFilePath("gh6714_01.php"), options, false, 
true);
+    }
+
+    public void testGH6714WithTab_01b() throws Exception {
+        HashMap<String, Object> options = new 
HashMap<>(FmtOptions.getDefaults());
+        options.put(FmtOptions.ALIGN_MULTILINE_CALL_ARGS, false);
+        options.put(FmtOptions.WRAP_EXTENDS_IMPLEMENTS_LIST, 
CodeStyle.WrapStyle.WRAP_ALWAYS);
+        options.put(FmtOptions.ALIGN_MULTILINE_IMPLEMENTS, true);
+        options.put(FmtOptions.ALIGN_MULTILINE_METHOD_PARAMS, true);
+        options.put(FmtOptions.TAB_SIZE, 4);
+        options.put(FmtOptions.CONTINUATION_INDENT_SIZE, 4);
+        options.put(FmtOptions.EXPAND_TAB_TO_SPACES, false);
+        reformatFileContents(getTestFilePath("gh6714_01.php"), options, false, 
true);
+    }
+
+    public void testGH6714WithTab_02a() throws Exception {
+        HashMap<String, Object> options = new 
HashMap<>(FmtOptions.getDefaults());
+        options.put(FmtOptions.ALIGN_MULTILINE_CALL_ARGS, true);
+        options.put(FmtOptions.WRAP_EXTENDS_IMPLEMENTS_LIST, 
CodeStyle.WrapStyle.WRAP_ALWAYS);
+        options.put(FmtOptions.ALIGN_MULTILINE_IMPLEMENTS, true);
+        options.put(FmtOptions.ALIGN_MULTILINE_METHOD_PARAMS, true);
+        options.put(FmtOptions.TAB_SIZE, 4);
+        options.put(FmtOptions.CONTINUATION_INDENT_SIZE, 4);
+        options.put(FmtOptions.EXPAND_TAB_TO_SPACES, false);
+        reformatFileContents(getTestFilePath("gh6714_02.php"), options, false, 
true);
+    }
+
+    public void testGH6714WithTab_02b() throws Exception {
+        HashMap<String, Object> options = new 
HashMap<>(FmtOptions.getDefaults());
+        options.put(FmtOptions.ALIGN_MULTILINE_CALL_ARGS, false);
+        options.put(FmtOptions.WRAP_EXTENDS_IMPLEMENTS_LIST, 
CodeStyle.WrapStyle.WRAP_ALWAYS);
+        options.put(FmtOptions.ALIGN_MULTILINE_IMPLEMENTS, true);
+        options.put(FmtOptions.ALIGN_MULTILINE_METHOD_PARAMS, true);
+        options.put(FmtOptions.TAB_SIZE, 4);
+        options.put(FmtOptions.CONTINUATION_INDENT_SIZE, 4);
+        options.put(FmtOptions.EXPAND_TAB_TO_SPACES, false);
+        reformatFileContents(getTestFilePath("gh6714_02.php"), options, false, 
true);
+    }
+
+    public void testGH6714WithSpaces_01a() throws Exception {
+        HashMap<String, Object> options = new 
HashMap<>(FmtOptions.getDefaults());
+        options.put(FmtOptions.ALIGN_MULTILINE_CALL_ARGS, true);
+        options.put(FmtOptions.WRAP_EXTENDS_IMPLEMENTS_LIST, 
CodeStyle.WrapStyle.WRAP_ALWAYS);
+        options.put(FmtOptions.ALIGN_MULTILINE_IMPLEMENTS, true);
+        options.put(FmtOptions.ALIGN_MULTILINE_METHOD_PARAMS, true);
+        options.put(FmtOptions.TAB_SIZE, 4);
+        options.put(FmtOptions.CONTINUATION_INDENT_SIZE, 4);
+        options.put(FmtOptions.EXPAND_TAB_TO_SPACES, true);
+        reformatFileContents(getTestFilePath("gh6714_01.php"), options, false, 
true);
+    }
+
+    public void testGH6714WithSpaces_01b() throws Exception {
+        HashMap<String, Object> options = new 
HashMap<>(FmtOptions.getDefaults());
+        options.put(FmtOptions.ALIGN_MULTILINE_CALL_ARGS, false);
+        options.put(FmtOptions.WRAP_EXTENDS_IMPLEMENTS_LIST, 
CodeStyle.WrapStyle.WRAP_ALWAYS);
+        options.put(FmtOptions.ALIGN_MULTILINE_IMPLEMENTS, true);
+        options.put(FmtOptions.ALIGN_MULTILINE_METHOD_PARAMS, true);
+        options.put(FmtOptions.TAB_SIZE, 4);
+        options.put(FmtOptions.CONTINUATION_INDENT_SIZE, 4);
+        options.put(FmtOptions.EXPAND_TAB_TO_SPACES, true);
+        reformatFileContents(getTestFilePath("gh6714_01.php"), options, false, 
true);
+    }
+
+    public void testGH6714WithSpaces_02a() throws Exception {
+        HashMap<String, Object> options = new 
HashMap<>(FmtOptions.getDefaults());
+        options.put(FmtOptions.ALIGN_MULTILINE_CALL_ARGS, true);
+        options.put(FmtOptions.WRAP_EXTENDS_IMPLEMENTS_LIST, 
CodeStyle.WrapStyle.WRAP_ALWAYS);
+        options.put(FmtOptions.ALIGN_MULTILINE_IMPLEMENTS, true);
+        options.put(FmtOptions.ALIGN_MULTILINE_METHOD_PARAMS, true);
+        options.put(FmtOptions.TAB_SIZE, 4);
+        options.put(FmtOptions.CONTINUATION_INDENT_SIZE, 4);
+        options.put(FmtOptions.EXPAND_TAB_TO_SPACES, true);
+        reformatFileContents(getTestFilePath("gh6714_02.php"), options, false, 
true);
+    }
+
+    public void testGH6714WithSpaces_02b() throws Exception {
+        HashMap<String, Object> options = new 
HashMap<>(FmtOptions.getDefaults());
+        options.put(FmtOptions.ALIGN_MULTILINE_CALL_ARGS, false);
+        options.put(FmtOptions.WRAP_EXTENDS_IMPLEMENTS_LIST, 
CodeStyle.WrapStyle.WRAP_ALWAYS);
+        options.put(FmtOptions.ALIGN_MULTILINE_IMPLEMENTS, true);
+        options.put(FmtOptions.ALIGN_MULTILINE_METHOD_PARAMS, true);
+        options.put(FmtOptions.TAB_SIZE, 4);
+        options.put(FmtOptions.CONTINUATION_INDENT_SIZE, 4);
+        options.put(FmtOptions.EXPAND_TAB_TO_SPACES, true);
+        reformatFileContents(getTestFilePath("gh6714_02.php"), options, false, 
true);
+    }
+
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists


Reply via email to