Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
coder
Manage
Activity
Members
Labels
Plan
Wiki
Custom issue tracker
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
project
coder
Commits
bf0dc2f5
Unverified
Commit
bf0dc2f5
authored
4 months ago
by
Klaus Purer
Committed by
GitHub
4 months ago
Browse files
Options
Downloads
Patches
Plain Diff
fix(ScopeIndent): Fix test fails on attributes on constructor promotion properties (
#3461148
)
parent
dfbd808b
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
coder_sniffer/Drupal/Sniffs/WhiteSpace/ScopeIndentSniff.php
+122
-46
122 additions, 46 deletions
coder_sniffer/Drupal/Sniffs/WhiteSpace/ScopeIndentSniff.php
tests/Drupal/good/good.php
+18
-0
18 additions, 0 deletions
tests/Drupal/good/good.php
with
140 additions
and
46 deletions
coder_sniffer/Drupal/Sniffs/WhiteSpace/ScopeIndentSniff.php
+
122
−
46
View file @
bf0dc2f5
...
...
@@ -126,7 +126,7 @@ class ScopeIndentSniff implements Sniff
* @param int $stackPtr The position of the current token
* in the stack passed in $tokens.
*
* @return
void|
int
* @return int
*/
public
function
process
(
File
$phpcsFile
,
$stackPtr
)
{
...
...
@@ -146,13 +146,14 @@ class ScopeIndentSniff implements Sniff
}
}
$lastOpenTag
=
$stackPtr
;
$lastCloseTag
=
null
;
$openScopes
=
[];
$adjustments
=
[];
$setIndents
=
[];
$disableExactEnd
=
0
;
$tokenIndent
=
0
;
$lastOpenTag
=
$stackPtr
;
$lastCloseTag
=
null
;
$openScopes
=
[];
$adjustments
=
[];
$setIndents
=
[];
$disableExactStack
=
[];
$disableExactEnd
=
0
;
$tokenIndent
=
0
;
$tokens
=
$phpcsFile
->
getTokens
();
$first
=
$phpcsFile
->
findFirstOnLine
(
T_INLINE_HTML
,
$stackPtr
);
...
...
@@ -232,6 +233,7 @@ class ScopeIndentSniff implements Sniff
if
(
$tokens
[
$i
][
'code'
]
===
T_OPEN_PARENTHESIS
&&
isset
(
$tokens
[
$i
][
'parenthesis_closer'
])
===
true
)
{
$disableExactStack
[
$tokens
[
$i
][
'parenthesis_closer'
]]
=
$tokens
[
$i
][
'parenthesis_closer'
];
$disableExactEnd
=
max
(
$disableExactEnd
,
$tokens
[
$i
][
'parenthesis_closer'
]);
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$i
][
'line'
];
...
...
@@ -337,7 +339,14 @@ class ScopeIndentSniff implements Sniff
echo
"
\t
* open tag is inside condition; using open tag *"
.
PHP_EOL
;
}
$checkIndent
=
(
$tokens
[
$lastOpenTag
][
'column'
]
-
1
);
$first
=
$phpcsFile
->
findFirstOnLine
([
T_WHITESPACE
,
T_INLINE_HTML
],
$lastOpenTag
,
true
);
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$first
][
'line'
];
$type
=
$tokens
[
$first
][
'type'
];
echo
"
\t
* first token on line
$line
is
$first
(
$type
) *"
.
PHP_EOL
;
}
$checkIndent
=
(
$tokens
[
$first
][
'column'
]
-
1
);
if
(
isset
(
$adjustments
[
$condition
])
===
true
)
{
$checkIndent
+=
$adjustments
[
$condition
];
}
...
...
@@ -483,12 +492,7 @@ class ScopeIndentSniff implements Sniff
$arrayOpener
=
$tokens
[
$arrayCloser
][
'bracket_opener'
];
if
(
$tokens
[
$arrayCloser
][
'line'
]
!==
$tokens
[
$arrayOpener
][
'line'
])
{
$first
=
$phpcsFile
->
findFirstOnLine
(
T_WHITESPACE
,
$arrayOpener
,
true
);
$checkIndent
=
(
$tokens
[
$first
][
'column'
]
-
1
);
if
(
isset
(
$adjustments
[
$first
])
===
true
)
{
$checkIndent
+=
$adjustments
[
$first
];
}
$first
=
$phpcsFile
->
findFirstOnLine
(
T_WHITESPACE
,
$arrayOpener
,
true
);
$exact
=
false
;
if
(
$this
->
debug
===
true
)
{
...
...
@@ -524,6 +528,11 @@ class ScopeIndentSniff implements Sniff
$first
=
$phpcsFile
->
findNext
(
T_WHITESPACE
,
(
$first
+
1
),
null
,
true
);
}
$checkIndent
=
(
$tokens
[
$first
][
'column'
]
-
1
);
if
(
isset
(
$adjustments
[
$first
])
===
true
)
{
$checkIndent
+=
$adjustments
[
$first
];
}
if
(
isset
(
$tokens
[
$first
][
'scope_closer'
])
===
true
&&
$tokens
[
$first
][
'scope_closer'
]
===
$first
)
{
...
...
@@ -609,11 +618,11 @@ class ScopeIndentSniff implements Sniff
// Scope closers reset the required indent to the same level as the opening condition.
if
((
$checkToken
!==
null
&&
isset
(
$openScopes
[
$checkToken
])
===
true
&&
(
isset
(
$openScopes
[
$checkToken
])
===
true
||
(
isset
(
$tokens
[
$checkToken
][
'scope_condition'
])
===
true
&&
isset
(
$tokens
[
$checkToken
][
'scope_closer'
])
===
true
&&
$tokens
[
$checkToken
][
'scope_closer'
]
===
$checkToken
&&
$tokens
[
$checkToken
][
'line'
]
!==
$tokens
[
$tokens
[
$checkToken
][
'scope_opener'
]][
'line'
]))
&&
$tokens
[
$checkToken
][
'line'
]
!==
$tokens
[
$tokens
[
$checkToken
][
'scope_opener'
]][
'line'
]))
)
||
(
$checkToken
===
null
&&
isset
(
$openScopes
[
$i
])
===
true
)
)
{
...
...
@@ -796,6 +805,19 @@ class ScopeIndentSniff implements Sniff
)
{
$exact
=
true
;
if
(
$disableExactEnd
>
$checkToken
)
{
foreach
(
$disableExactStack
as
$disableExactStackEnd
)
{
if
(
$disableExactStackEnd
<
$checkToken
)
{
continue
;
}
if
(
$tokens
[
$checkToken
][
'conditions'
]
===
$tokens
[
$disableExactStackEnd
][
'conditions'
])
{
$exact
=
false
;
break
;
}
}
}
$lastOpener
=
null
;
if
(
empty
(
$openScopes
)
===
false
)
{
end
(
$openScopes
);
...
...
@@ -844,16 +866,34 @@ class ScopeIndentSniff implements Sniff
&&
$tokens
[(
$checkToken
+
1
)][
'code'
]
!==
T_DOUBLE_COLON
)
{
$next
=
$phpcsFile
->
findNext
(
Tokens
::
$emptyTokens
,
(
$checkToken
+
1
),
null
,
true
);
if
(
$next
===
false
||
$tokens
[
$next
][
'code'
]
!==
T_CLOSURE
)
{
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$checkToken
][
'line'
];
$type
=
$tokens
[
$checkToken
][
'type'
];
echo
"
\t
* method prefix (
$type
) found on line
$line
; indent set to exact *"
.
PHP_EOL
;
if
(
$next
===
false
||
(
$tokens
[
$next
][
'code'
]
!==
T_CLOSURE
&&
$tokens
[
$next
][
'code'
]
!==
T_VARIABLE
&&
$tokens
[
$next
][
'code'
]
!==
T_FN
)
)
{
$isMethodPrefix
=
true
;
if
(
isset
(
$tokens
[
$checkToken
][
'nested_parenthesis'
])
===
true
)
{
$parenthesis
=
array_keys
(
$tokens
[
$checkToken
][
'nested_parenthesis'
]);
$deepestOpen
=
array_pop
(
$parenthesis
);
if
(
isset
(
$tokens
[
$deepestOpen
][
'parenthesis_owner'
])
===
true
&&
$tokens
[
$tokens
[
$deepestOpen
][
'parenthesis_owner'
]][
'code'
]
===
T_FUNCTION
)
{
// This is constructor property promotion and not a method prefix.
$isMethodPrefix
=
false
;
}
}
$exact
=
true
;
}
}
if
(
$isMethodPrefix
===
true
)
{
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$checkToken
][
'line'
];
$type
=
$tokens
[
$checkToken
][
'type'
];
echo
"
\t
* method prefix (
$type
) found on line
$line
; indent set to exact *"
.
PHP_EOL
;
}
$exact
=
true
;
}
}
//end if
}
//end if
// JS property indentation has to be exact or else if will break
// things like function and object indentation.
...
...
@@ -890,8 +930,6 @@ class ScopeIndentSniff implements Sniff
}
}
}
$checkIndent
=
(
int
)
(
ceil
(
$checkIndent
/
$this
->
indent
)
*
$this
->
indent
);
}
//end if
// Close tags needs to be indented to exact column positions.
...
...
@@ -911,7 +949,8 @@ class ScopeIndentSniff implements Sniff
// Don't perform strict checking on chained method calls since they
// are often covered by custom rules.
if
(
$checkToken
!==
null
&&
$tokens
[
$checkToken
][
'code'
]
===
T_OBJECT_OPERATOR
&&
(
$tokens
[
$checkToken
][
'code'
]
===
T_OBJECT_OPERATOR
||
$tokens
[
$checkToken
][
'code'
]
===
T_NULLSAFE_OBJECT_OPERATOR
)
&&
$exact
===
true
)
{
$exact
=
false
;
...
...
@@ -988,18 +1027,38 @@ class ScopeIndentSniff implements Sniff
}
if
(
$this
->
tabIndent
===
true
)
{
$error
.
=
'%s tabs, found %s'
;
$data
=
[
floor
(
$checkIndent
/
$this
->
tabWidth
),
floor
(
$tokenIndent
/
$this
->
tabWidth
),
];
$expectedTabs
=
floor
(
$checkIndent
/
$this
->
tabWidth
);
$foundTabs
=
floor
(
$tokenIndent
/
$this
->
tabWidth
);
$foundSpaces
=
(
$tokenIndent
-
(
$foundTabs
*
$this
->
tabWidth
));
if
(
$foundSpaces
>
0
)
{
if
(
$foundTabs
>
0
)
{
$error
.
=
'%s tabs, found %s tabs and %s spaces'
;
$data
=
[
$expectedTabs
,
$foundTabs
,
$foundSpaces
,
];
}
else
{
$error
.
=
'%s tabs, found %s spaces'
;
$data
=
[
$expectedTabs
,
$foundSpaces
,
];
}
}
else
{
$error
.
=
'%s tabs, found %s'
;
$data
=
[
$expectedTabs
,
$foundTabs
,
];
}
//end if
}
else
{
$error
.
=
'%s spaces, found %s'
;
$data
=
[
$checkIndent
,
$tokenIndent
,
];
}
}
//end if
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$checkToken
][
'line'
];
...
...
@@ -1030,15 +1089,17 @@ class ScopeIndentSniff implements Sniff
// Don't check indents exactly between arrays as they tend to have custom rules.
if
(
$tokens
[
$i
][
'code'
]
===
T_OPEN_SHORT_ARRAY
)
{
$disableExactStack
[
$tokens
[
$i
][
'bracket_closer'
]]
=
$tokens
[
$i
][
'bracket_closer'
];
$disableExactEnd
=
max
(
$disableExactEnd
,
$tokens
[
$i
][
'bracket_closer'
]);
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$i
][
'line'
];
$type
=
$tokens
[
$disableExactEnd
][
'type'
];
$line
=
$tokens
[
$i
][
'line'
];
$type
=
$tokens
[
$disableExactEnd
][
'type'
];
$endLine
=
$tokens
[
$disableExactEnd
][
'line'
];
echo
"Opening short array bracket found on line
$line
"
.
PHP_EOL
;
if
(
$disableExactEnd
===
$tokens
[
$i
][
'bracket_closer'
])
{
echo
"
\t
=> disabling exact indent checking until
$disableExactEnd
(
$type
)"
.
PHP_EOL
;
echo
"
\t
=> disabling exact indent checking until
$disableExactEnd
(
$type
)
on line
$endLine
"
.
PHP_EOL
;
}
else
{
echo
"
\t
=> continuing to disable exact indent checking until
$disableExactEnd
(
$type
)"
.
PHP_EOL
;
echo
"
\t
=> continuing to disable exact indent checking until
$disableExactEnd
(
$type
)
on line
$endLine
"
.
PHP_EOL
;
}
}
}
...
...
@@ -1050,7 +1111,6 @@ class ScopeIndentSniff implements Sniff
)
{
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$i
][
'line'
];
$type
=
$tokens
[
$disableExactEnd
][
'type'
];
echo
"Here/nowdoc found on line
$line
"
.
PHP_EOL
;
}
...
...
@@ -1074,8 +1134,11 @@ class ScopeIndentSniff implements Sniff
if
(
$tokens
[
$i
][
'code'
]
===
T_CONSTANT_ENCAPSED_STRING
||
$tokens
[
$i
][
'code'
]
===
T_DOUBLE_QUOTED_STRING
)
{
$i
=
$phpcsFile
->
findNext
(
$tokens
[
$i
][
'code'
],
(
$i
+
1
),
null
,
true
);
$i
--
;
$nextNonTextString
=
$phpcsFile
->
findNext
(
$tokens
[
$i
][
'code'
],
(
$i
+
1
),
null
,
true
);
if
(
$nextNonTextString
!==
false
)
{
$i
=
(
$nextNonTextString
-
1
);
}
continue
;
}
...
...
@@ -1162,7 +1225,7 @@ class ScopeIndentSniff implements Sniff
if
(
$this
->
debug
===
true
)
{
$type
=
str_replace
(
'_'
,
' '
,
strtolower
(
substr
(
$tokens
[
$i
][
'type'
],
2
)));
$line
=
$tokens
[
$i
][
'line'
];
echo
"* ignoring single-line
$type
on line
$line
"
.
PHP_EOL
;
echo
"* ignoring single-line
$type
on line
$line
*
"
.
PHP_EOL
;
}
$i
=
$closer
;
...
...
@@ -1232,7 +1295,7 @@ class ScopeIndentSniff implements Sniff
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$i
][
'line'
];
$type
=
$tokens
[
$i
][
'type'
];
echo
"* ignoring single-line
$type
on line
$line
"
.
PHP_EOL
;
echo
"* ignoring single-line
$type
on line
$line
*
"
.
PHP_EOL
;
}
$i
=
$closer
;
...
...
@@ -1240,6 +1303,16 @@ class ScopeIndentSniff implements Sniff
}
$condition
=
$tokens
[
$tokens
[
$i
][
'scope_condition'
]][
'code'
];
if
(
$condition
===
T_FN
)
{
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$tokens
[
$i
][
'scope_condition'
]][
'line'
];
echo
"* ignoring arrow function on line
$line
*"
.
PHP_EOL
;
}
$i
=
$closer
;
continue
;
}
if
(
isset
(
Tokens
::
$scopeOpeners
[
$condition
])
===
true
&&
in_array
(
$condition
,
$this
->
nonIndentingScopes
,
true
)
===
false
)
{
...
...
@@ -1279,7 +1352,7 @@ class ScopeIndentSniff implements Sniff
if
(
$tokens
[
$i
][
'line'
]
===
$tokens
[
$closer
][
'line'
])
{
if
(
$this
->
debug
===
true
)
{
$line
=
$tokens
[
$i
][
'line'
];
echo
"* ignoring single-line JS object on line
$line
"
.
PHP_EOL
;
echo
"* ignoring single-line JS object on line
$line
*
"
.
PHP_EOL
;
}
$i
=
$closer
;
...
...
@@ -1309,11 +1382,14 @@ class ScopeIndentSniff implements Sniff
continue
;
}
//end if
// Closing an anon class or function.
// Closing an anon class, closure, or match.
// Each may be returned, which can confuse control structures that
// use return as a closer, like CASE statements.
if
(
isset
(
$tokens
[
$i
][
'scope_condition'
])
===
true
&&
$tokens
[
$i
][
'scope_closer'
]
===
$i
&&
(
$tokens
[
$tokens
[
$i
][
'scope_condition'
]][
'code'
]
===
T_CLOSURE
||
$tokens
[
$tokens
[
$i
][
'scope_condition'
]][
'code'
]
===
T_ANON_CLASS
)
||
$tokens
[
$tokens
[
$i
][
'scope_condition'
]][
'code'
]
===
T_ANON_CLASS
||
$tokens
[
$tokens
[
$i
][
'scope_condition'
]][
'code'
]
===
T_MATCH
)
)
{
if
(
$this
->
debug
===
true
)
{
$type
=
str_replace
(
'_'
,
' '
,
strtolower
(
substr
(
$tokens
[
$tokens
[
$i
][
'scope_condition'
]][
'type'
],
2
)));
...
...
This diff is collapsed.
Click to expand it.
tests/Drupal/good/good.php
+
18
−
0
View file @
bf0dc2f5
...
...
@@ -1887,3 +1887,21 @@ $form['strings'] = [
'#empty'
=>
$this
->
t
(
'No strings available.'
),
'#attributes'
=>
[
'class'
=>
[
'locale-translate-edit-table'
]],
];
/**
* Implements hook_cron().
*/
#[Hook('cron')]
class
CronHook
{
public
function
__construct
(
private
readonly
EntityTypeManagerInterface
$entityTypeManager
,
private
readonly
StreamWrapperManagerInterface
$streamWrapperManager
,
private
readonly
ConfigFactoryInterface
$configFactory
,
private
readonly
FileUsageInterface
$fileUsage
,
private
readonly
TimeInterface
$time
,
#[Autowire('@logger.channel.file')]
private
readonly
LoggerInterface
$logger
,
)
{}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment