Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14092534
D13935.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
19 KB
Referenced Files
None
Subscribers
None
D13935.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -272,6 +272,8 @@
'ArcanistPHPOpenTagXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistPHPOpenTagXHPASTLinterRuleTestCase.php',
'ArcanistPHPShortTagXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistPHPShortTagXHPASTLinterRule.php',
'ArcanistPHPShortTagXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistPHPShortTagXHPASTLinterRuleTestCase.php',
+ 'ArcanistPaamayimNekudotayimSpacingXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistPaamayimNekudotayimSpacingXHPASTLinterRule.php',
+ 'ArcanistPaamayimNekudotayimSpacingXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistPaamayimNekudotayimSpacingXHPASTLinterRuleTestCase.php',
'ArcanistParentMemberReferenceXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistParentMemberReferenceXHPASTLinterRule.php',
'ArcanistParentMemberReferenceXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistParentMemberReferenceXHPASTLinterRuleTestCase.php',
'ArcanistParenthesesSpacingXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistParenthesesSpacingXHPASTLinterRule.php',
@@ -317,6 +319,8 @@
'ArcanistRubyLinter' => 'lint/linter/ArcanistRubyLinter.php',
'ArcanistRubyLinterTestCase' => 'lint/linter/__tests__/ArcanistRubyLinterTestCase.php',
'ArcanistScriptAndRegexLinter' => 'lint/linter/ArcanistScriptAndRegexLinter.php',
+ 'ArcanistSelfClassReferenceXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistSelfClassReferenceXHPASTLinterRule.php',
+ 'ArcanistSelfClassReferenceXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistSelfClassReferenceXHPASTLinterRuleTestCase.php',
'ArcanistSelfMemberReferenceXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistSelfMemberReferenceXHPASTLinterRule.php',
'ArcanistSelfMemberReferenceXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistSelfMemberReferenceXHPASTLinterRuleTestCase.php',
'ArcanistSemicolonSpacingXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistSemicolonSpacingXHPASTLinterRule.php',
@@ -680,6 +684,8 @@
'ArcanistPHPOpenTagXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistPHPShortTagXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistPHPShortTagXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
+ 'ArcanistPaamayimNekudotayimSpacingXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
+ 'ArcanistPaamayimNekudotayimSpacingXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistParentMemberReferenceXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistParentMemberReferenceXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistParenthesesSpacingXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
@@ -725,6 +731,8 @@
'ArcanistRubyLinter' => 'ArcanistExternalLinter',
'ArcanistRubyLinterTestCase' => 'ArcanistExternalLinterTestCase',
'ArcanistScriptAndRegexLinter' => 'ArcanistLinter',
+ 'ArcanistSelfClassReferenceXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
+ 'ArcanistSelfClassReferenceXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistSelfMemberReferenceXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistSelfMemberReferenceXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistSemicolonSpacingXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
diff --git a/src/lint/linter/xhpast/rules/ArcanistKeywordCasingXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistKeywordCasingXHPASTLinterRule.php
--- a/src/lint/linter/xhpast/rules/ArcanistKeywordCasingXHPASTLinterRule.php
+++ b/src/lint/linter/xhpast/rules/ArcanistKeywordCasingXHPASTLinterRule.php
@@ -15,73 +15,98 @@
public function process(XHPASTNode $root) {
$keywords = $root->selectTokensOfTypes(array(
- 'T_REQUIRE_ONCE',
- 'T_REQUIRE',
- 'T_EVAL',
- 'T_INCLUDE_ONCE',
- 'T_INCLUDE',
- 'T_LOGICAL_OR',
- 'T_LOGICAL_XOR',
- 'T_LOGICAL_AND',
- 'T_PRINT',
- 'T_INSTANCEOF',
+ 'T_ABSTRACT',
+ 'T_ARRAY',
+ 'T_AS',
+ 'T_BREAK',
+ 'T_CALLABLE',
+ 'T_CASE',
+ 'T_CATCH',
+ 'T_CLASS',
'T_CLONE',
- 'T_NEW',
- 'T_EXIT',
- 'T_IF',
- 'T_ELSEIF',
+ 'T_CONST',
+ 'T_CONTINUE',
+ 'T_DECLARE',
+ 'T_DEFAULT',
+ 'T_DO',
+ 'T_ECHO',
'T_ELSE',
+ 'T_ELSEIF',
+ 'T_EMPTY',
+ 'T_ENDDECLARE',
+ 'T_ENDFOR',
+ 'T_ENDFOREACH',
'T_ENDIF',
- 'T_ECHO',
- 'T_DO',
- 'T_WHILE',
+ 'T_ENDSWITCH',
'T_ENDWHILE',
+ 'T_EVAL',
+ 'T_EXIT',
+ 'T_EXTENDS',
+ 'T_FINAL',
+ 'T_FINALLY',
'T_FOR',
- 'T_ENDFOR',
'T_FOREACH',
- 'T_ENDFOREACH',
- 'T_DECLARE',
- 'T_ENDDECLARE',
- 'T_AS',
- 'T_SWITCH',
- 'T_ENDSWITCH',
- 'T_CASE',
- 'T_DEFAULT',
- 'T_BREAK',
- 'T_CONTINUE',
- 'T_GOTO',
'T_FUNCTION',
- 'T_CONST',
- 'T_RETURN',
- 'T_TRY',
- 'T_CATCH',
- 'T_THROW',
- 'T_USE',
'T_GLOBAL',
- 'T_PUBLIC',
- 'T_PROTECTED',
- 'T_PRIVATE',
- 'T_FINAL',
- 'T_ABSTRACT',
- 'T_STATIC',
- 'T_VAR',
- 'T_UNSET',
- 'T_ISSET',
- 'T_EMPTY',
+ 'T_GOTO',
'T_HALT_COMPILER',
- 'T_CLASS',
- 'T_INTERFACE',
- 'T_EXTENDS',
+ 'T_IF',
'T_IMPLEMENTS',
+ 'T_INCLUDE',
+ 'T_INCLUDE_ONCE',
+ 'T_INSTANCEOF',
+ 'T_INSTEADOF',
+ 'T_INTERFACE',
+ 'T_ISSET',
'T_LIST',
- 'T_ARRAY',
+ 'T_LOGICAL_AND',
+ 'T_LOGICAL_OR',
+ 'T_LOGICAL_XOR',
'T_NAMESPACE',
- 'T_INSTEADOF',
- 'T_CALLABLE',
+ 'T_NEW',
+ 'T_PRINT',
+ 'T_PRIVATE',
+ 'T_PROTECTED',
+ 'T_PUBLIC',
+ 'T_REQUIRE',
+ 'T_REQUIRE_ONCE',
+ 'T_RETURN',
+ 'T_STATIC',
+ 'T_SWITCH',
+ 'T_THROW',
'T_TRAIT',
+ 'T_TRY',
+ 'T_UNSET',
+ 'T_USE',
+ 'T_VAR',
+ 'T_WHILE',
'T_YIELD',
- 'T_FINALLY',
));
+
+ // Because there is no `T_SELF` or `T_PARENT` token.
+ $class_static_accesses = $root
+ ->selectDescendantsOfType('n_CLASS_DECLARATION')
+ ->selectDescendantsOfType('n_CLASS_STATIC_ACCESS');
+ foreach ($class_static_accesses as $class_static_access) {
+ $class_ref = $class_static_access->getChildByIndex(0);
+
+ switch (strtolower($class_ref->getConcreteString())) {
+ case 'parent':
+ case 'self':
+ $tokens = $class_ref->getTokens();
+
+ if (count($tokens) > 1) {
+ throw new Exception(
+ pht(
+ 'Unexpected tokens whilst processing `%s`.',
+ __CLASS__));
+ }
+
+ $keywords[] = head($tokens);
+ break;
+ }
+ }
+
foreach ($keywords as $keyword) {
$value = $keyword->getValue();
diff --git a/src/lint/linter/xhpast/rules/ArcanistPaamayimNekudotayimSpacingXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistPaamayimNekudotayimSpacingXHPASTLinterRule.php
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/ArcanistPaamayimNekudotayimSpacingXHPASTLinterRule.php
@@ -0,0 +1,40 @@
+<?php
+
+final class ArcanistPaamayimNekudotayimSpacingXHPASTLinterRule
+ extends ArcanistXHPASTLinterRule {
+
+ const ID = 96;
+
+ public function getLintName() {
+ return pht('Paamayim Nekudotayim Spacing');
+ }
+
+ public function getLintSeverity() {
+ return ArcanistLintSeverity::SEVERITY_WARNING;
+ }
+
+ public function process(XHPASTNode $root) {
+ $double_colons = $root->selectTokensOfType('T_PAAMAYIM_NEKUDOTAYIM');
+
+ foreach ($double_colons as $double_colon) {
+ $tokens = $double_colon->getNonsemanticTokensBefore() +
+ $double_colon->getNonsemanticTokensAfter();
+
+ foreach ($tokens as $token) {
+ if ($token->isAnyWhitespace()) {
+ if (strpos($token->getValue(), "\n") !== false) {
+ continue;
+ }
+
+ $this->raiseLintAtToken(
+ $token,
+ pht(
+ 'Unnecessary whitespace around paamayim nekudotayim '.
+ '(double colon) operator.'),
+ '');
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/lint/linter/xhpast/rules/ArcanistSelfClassReferenceXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistSelfClassReferenceXHPASTLinterRule.php
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/ArcanistSelfClassReferenceXHPASTLinterRule.php
@@ -0,0 +1,45 @@
+<?php
+
+final class ArcanistSelfClassReferenceXHPASTLinterRule
+ extends ArcanistXHPASTLinterRule {
+
+ const ID = 95;
+
+ public function getLintName() {
+ return pht('Self Class Reference');
+ }
+
+ public function getLintSeverity() {
+ return ArcanistLintSeverity::SEVERITY_WARNING;
+ }
+
+ public function process(XHPASTNode $root) {
+ $class_declarations = $root->selectDescendantsOfType('n_CLASS_DECLARATION');
+
+ foreach ($class_declarations as $class_declaration) {
+ $class_name = $class_declaration
+ ->getChildOfType(1, 'n_CLASS_NAME')
+ ->getConcreteString();
+ $instantiations = $class_declaration
+ ->selectDescendantsOfType('n_NEW');
+
+ foreach ($instantiations as $instantiation) {
+ $type = $instantiation->getChildByIndex(0);
+
+ if ($type->getTypeName() != 'n_CLASS_NAME') {
+ continue;
+ }
+
+ if (strtolower($type->getConcreteString()) == strtolower($class_name)) {
+ $this->raiseLintAtNode(
+ $type,
+ pht(
+ 'Use `%s` to instantiate the current class.',
+ 'self'),
+ 'self');
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/lint/linter/xhpast/rules/ArcanistSelfMemberReferenceXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistSelfMemberReferenceXHPASTLinterRule.php
--- a/src/lint/linter/xhpast/rules/ArcanistSelfMemberReferenceXHPASTLinterRule.php
+++ b/src/lint/linter/xhpast/rules/ArcanistSelfMemberReferenceXHPASTLinterRule.php
@@ -10,7 +10,7 @@
}
public function getLintSeverity() {
- return ArcanistLintSeverity::SEVERITY_ADVICE;
+ return ArcanistLintSeverity::SEVERITY_WARNING;
}
public function process(XHPASTNode $root) {
@@ -20,14 +20,11 @@
$class_name = $class_declaration
->getChildOfType(1, 'n_CLASS_NAME')
->getConcreteString();
-
$class_static_accesses = $class_declaration
->selectDescendantsOfType('n_CLASS_STATIC_ACCESS');
$closures = $this->getAnonymousClosures($class_declaration);
foreach ($class_static_accesses as $class_static_access) {
- $double_colons = $class_static_access
- ->selectTokensOfType('T_PAAMAYIM_NEKUDOTAYIM');
$class_ref = $class_static_access->getChildByIndex(0);
if ($class_ref->getTypeName() != 'n_CLASS_NAME') {
@@ -54,43 +51,6 @@
'self');
}
}
-
- static $self_refs = array(
- 'parent',
- 'self',
- 'static',
- );
-
- if (!in_array(strtolower($class_ref_name), $self_refs)) {
- continue;
- }
-
- if ($class_ref_name != strtolower($class_ref_name)) {
- $this->raiseLintAtNode(
- $class_ref,
- pht('PHP keywords should be lowercase.'),
- strtolower($class_ref_name));
- }
- }
- }
-
- $double_colons = $root->selectTokensOfType('T_PAAMAYIM_NEKUDOTAYIM');
-
- foreach ($double_colons as $double_colon) {
- $tokens = $double_colon->getNonsemanticTokensBefore() +
- $double_colon->getNonsemanticTokensAfter();
-
- foreach ($tokens as $token) {
- if ($token->isAnyWhitespace()) {
- if (strpos($token->getValue(), "\n") !== false) {
- continue;
- }
-
- $this->raiseLintAtToken(
- $token,
- pht('Unnecessary whitespace around double colon operator.'),
- '');
- }
}
}
}
diff --git a/src/lint/linter/xhpast/rules/__tests__/ArcanistPaamayimNekudotayimSpacingXHPASTLinterRuleTestCase.php b/src/lint/linter/xhpast/rules/__tests__/ArcanistPaamayimNekudotayimSpacingXHPASTLinterRuleTestCase.php
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/__tests__/ArcanistPaamayimNekudotayimSpacingXHPASTLinterRuleTestCase.php
@@ -0,0 +1,11 @@
+<?php
+
+final class ArcanistPaamayimNekudotayimSpacingXHPASTLinterRuleTestCase
+ extends ArcanistXHPASTLinterRuleTestCase {
+
+ public function testLinter() {
+ $this->executeTestsInDirectory(
+ dirname(__FILE__).'/paamayim-nekudotayim-spacing/');
+ }
+
+}
diff --git a/src/lint/linter/xhpast/rules/__tests__/ArcanistSelfClassReferenceXHPASTLinterRuleTestCase.php b/src/lint/linter/xhpast/rules/__tests__/ArcanistSelfClassReferenceXHPASTLinterRuleTestCase.php
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/__tests__/ArcanistSelfClassReferenceXHPASTLinterRuleTestCase.php
@@ -0,0 +1,10 @@
+<?php
+
+final class ArcanistSelfClassReferenceXHPASTLinterRuleTestCase
+ extends ArcanistXHPASTLinterRuleTestCase {
+
+ public function testLinter() {
+ $this->executeTestsInDirectory(dirname(__FILE__).'/self-class-reference/');
+ }
+
+}
diff --git a/src/lint/linter/xhpast/rules/__tests__/keyword-casing/parent.lint-test b/src/lint/linter/xhpast/rules/__tests__/keyword-casing/parent.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/__tests__/keyword-casing/parent.lint-test
@@ -0,0 +1,25 @@
+<?php
+
+class Foo extends Bar {
+ public static function doSomething() {
+ return PARENT::doSomething();
+ }
+
+ public static function doSomethingElse() {
+ return parent::doSomethingElse();
+ }
+}
+~~~~~~~~~~
+warning:5:12
+~~~~~~~~~~
+<?php
+
+class Foo extends Bar {
+ public static function doSomething() {
+ return parent::doSomething();
+ }
+
+ public static function doSomethingElse() {
+ return parent::doSomethingElse();
+ }
+}
diff --git a/src/lint/linter/xhpast/rules/__tests__/keyword-casing/self.lint-test b/src/lint/linter/xhpast/rules/__tests__/keyword-casing/self.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/__tests__/keyword-casing/self.lint-test
@@ -0,0 +1,25 @@
+<?php
+
+class Foo extends Bar {
+ public static function doSomething() {
+ return SELF::doSomethingElse();
+ }
+
+ public static function doSomethingElse() {
+ return self::doSomething();
+ }
+}
+~~~~~~~~~~
+warning:5:12
+~~~~~~~~~~
+<?php
+
+class Foo extends Bar {
+ public static function doSomething() {
+ return self::doSomethingElse();
+ }
+
+ public static function doSomethingElse() {
+ return self::doSomething();
+ }
+}
diff --git a/src/lint/linter/xhpast/rules/__tests__/paamayim-nekudotayim-spacing/comment.lint-test b/src/lint/linter/xhpast/rules/__tests__/paamayim-nekudotayim-spacing/comment.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/__tests__/paamayim-nekudotayim-spacing/comment.lint-test
@@ -0,0 +1,5 @@
+<?php
+
+// This is quite odd, but seems somewhat reasonable.
+MyClass/* comment */::/* another comment */myMethod();
+~~~~~~~~~~
diff --git a/src/lint/linter/xhpast/rules/__tests__/paamayim-nekudotayim-spacing/newline.lint-test b/src/lint/linter/xhpast/rules/__tests__/paamayim-nekudotayim-spacing/newline.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/__tests__/paamayim-nekudotayim-spacing/newline.lint-test
@@ -0,0 +1,6 @@
+<?php
+SomeReallyLongClassName::
+ someMethod();
+SomeReallyLongClassName
+ ::someMethod();
+~~~~~~~~~~
diff --git a/src/lint/linter/xhpast/rules/__tests__/paamayim-nekudotayim-spacing/paamayim-nekudotayim-spacing.lint-test b/src/lint/linter/xhpast/rules/__tests__/paamayim-nekudotayim-spacing/paamayim-nekudotayim-spacing.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/__tests__/paamayim-nekudotayim-spacing/paamayim-nekudotayim-spacing.lint-test
@@ -0,0 +1,36 @@
+<?php
+
+class Foo extends Bar {
+ public function bar() {
+ echo self::FOOBAR;
+ echo self :: FOOBAR;
+ }
+}
+
+MyClass::myMethod();
+MyClass :: myMethod();
+
+MyClass::$myProperty;
+MyClass :: $myProperty;
+~~~~~~~~~~
+warning:6:14
+warning:6:17
+warning:11:8
+warning:11:11
+warning:14:8
+warning:14:11
+~~~~~~~~~~
+<?php
+
+class Foo extends Bar {
+ public function bar() {
+ echo self::FOOBAR;
+ echo self::FOOBAR;
+ }
+}
+
+MyClass::myMethod();
+MyClass::myMethod();
+
+MyClass::$myProperty;
+MyClass::$myProperty;
diff --git a/src/lint/linter/xhpast/rules/__tests__/self-class-reference/self-class-references.lint-test b/src/lint/linter/xhpast/rules/__tests__/self-class-reference/self-class-references.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/__tests__/self-class-reference/self-class-references.lint-test
@@ -0,0 +1,25 @@
+<?php
+
+class Foo extends Bar {
+ public static function newInstance() {
+ return new Foo();
+ }
+
+ public static function init() {
+ return new self();
+ }
+}
+~~~~~~~~~~
+warning:5:16
+~~~~~~~~~~
+<?php
+
+class Foo extends Bar {
+ public static function newInstance() {
+ return new self();
+ }
+
+ public static function init() {
+ return new self();
+ }
+}
diff --git a/src/lint/linter/xhpast/rules/__tests__/self-member-reference/php54.lint-test b/src/lint/linter/xhpast/rules/__tests__/self-member-reference/php54.lint-test
--- a/src/lint/linter/xhpast/rules/__tests__/self-member-reference/php54.lint-test
+++ b/src/lint/linter/xhpast/rules/__tests__/self-member-reference/php54.lint-test
@@ -4,12 +4,13 @@
public static function someMethod() {
$closure = function () {
SomeClass::someOtherMethod();
+ self::someOtherMethod();
};
$closure();
}
}
~~~~~~~~~~
-advice:6:7
+warning:6:7
~~~~~~~~~~
<?php
@@ -17,6 +18,7 @@
public static function someMethod() {
$closure = function () {
self::someOtherMethod();
+ self::someOtherMethod();
};
$closure();
}
diff --git a/src/lint/linter/xhpast/rules/__tests__/self-member-reference/self-member-reference.lint-test b/src/lint/linter/xhpast/rules/__tests__/self-member-reference/self-member-reference.lint-test
--- a/src/lint/linter/xhpast/rules/__tests__/self-member-reference/self-member-reference.lint-test
+++ b/src/lint/linter/xhpast/rules/__tests__/self-member-reference/self-member-reference.lint-test
@@ -3,59 +3,21 @@
class Foo extends Bar {
const FOOBAR = 'FOOBAR';
- public function __construct() {
- PARENT::__construct(null);
- }
-
- public function bar() {
- echo self::FOOBAR;
- echo Self :: FOOBAR;
- }
-
- public function baz(Foo $x) {
- echo static::FOOBAR;
+ public function baz() {
echo Foo::FOOBAR;
-
- $x::bar();
+ echo self::FOOBAR;
}
}
-
-MyClass :: myMethod();
-
-SomeReallyLongClassName
- ::someMethod();
~~~~~~~~~~
-advice:7:5
-advice:12:10
-advice:12:14
-advice:12:17
-advice:17:10
-advice:23:8
-advice:23:11
+warning:7:10
~~~~~~~~~~
<?php
class Foo extends Bar {
const FOOBAR = 'FOOBAR';
- public function __construct() {
- parent::__construct(null);
- }
-
- public function bar() {
+ public function baz() {
echo self::FOOBAR;
echo self::FOOBAR;
}
-
- public function baz(Foo $x) {
- echo static::FOOBAR;
- echo self::FOOBAR;
-
- $x::bar();
- }
}
-
-MyClass::myMethod();
-
-SomeReallyLongClassName
- ::someMethod();
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Nov 26, 6:36 AM (2 m, 57 s)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6788421
Default Alt Text
D13935.diff (19 KB)
Attached To
Mode
D13935: Improve the "self member reference" linter rule
Attached
Detach File
Event Timeline
Log In to Comment