Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ New ObjectDeclarations::getDeclared*() utility methods #592

Merged
merged 1 commit into from
May 23, 2024

Conversation

jrfnl
Copy link
Member

@jrfnl jrfnl commented May 10, 2024

This commit adds a new set of utility methods to the ObjectDeclarations class:

  • getDeclaredConstants(File $phpcsFile, int $stackPtr): array
  • getDeclaredEnumCases(File $phpcsFile, int $stackPtr): array
  • getDeclaredProperties(File $phpcsFile, int $stackPtr): array
  • getDeclaredMethods(File $phpcsFile, int $stackPtr): array
  • (private) analyzeOOStructure(File $phpcsFile, int $stackPtr): array

These methods allow for retrieving an array with the names of all constants, enum cases, properties and methods as the keys and the stack pointer to the relevant T_CONST, T_ENUM_CASE, T_VARIABLE or T_FUNCTION token as the value.

As these methods all used the same analyzeOOStructure() method under the hood and the results of that method are cached, the method are highly optimized for performance.

If a sniff needs to search for a named constant/enum case/property/method in an OO structure, in most cases, these methods should be the recommended way for finding the declaration, instead of the sniff attempting to do this itself.

Includes extensive unit tests.

Closes #124

@jrfnl jrfnl added this to the 1.1.0 milestone May 10, 2024
@jrfnl jrfnl mentioned this pull request May 10, 2024
28 tasks
@jrfnl jrfnl force-pushed the objectdeclarations/new-getmethods-utility branch from 88735be to 3c70445 Compare May 13, 2024 11:49
@jrfnl
Copy link
Member Author

jrfnl commented May 13, 2024

Rebased on top of #600 and added a commit to take advantage of the new exceptions. Moving to draft until #600 has been merged.

@jrfnl jrfnl changed the base branch from develop to feature/add-more-defensive-coding-typeerrors May 13, 2024 11:50
@jrfnl jrfnl marked this pull request as draft May 13, 2024 11:50
@jrfnl jrfnl force-pushed the feature/add-more-defensive-coding-typeerrors branch from 68e4394 to 38ec4cb Compare May 14, 2024 06:20
@jrfnl jrfnl force-pushed the objectdeclarations/new-getmethods-utility branch from 3c70445 to d3dc01a Compare May 14, 2024 06:21
@jrfnl jrfnl force-pushed the feature/add-more-defensive-coding-typeerrors branch 2 times, most recently from b03bf36 to da71d5a Compare May 14, 2024 06:53
@jrfnl jrfnl force-pushed the objectdeclarations/new-getmethods-utility branch from d3dc01a to 284714b Compare May 14, 2024 06:54
@jrfnl jrfnl force-pushed the feature/add-more-defensive-coding-typeerrors branch 2 times, most recently from c15cf06 to 33541ff Compare May 20, 2024 19:00
Base automatically changed from feature/add-more-defensive-coding-typeerrors to develop May 20, 2024 19:13
This commit adds a new set of utility methods to the `ObjectDeclarations` class:
* `getDeclaredConstants(File $phpcsFile, int $stackPtr): array`
* `getDeclaredEnumCases(File $phpcsFile, int $stackPtr): array`
* `getDeclaredProperties(File $phpcsFile, int $stackPtr): array`
* `getDeclaredMethods(File $phpcsFile, int $stackPtr): array`
* (`private`) `analyzeOOStructure(File $phpcsFile, int $stackPtr): array`

These methods allow for retrieving an array with the names of all constants, enum cases, properties and methods as the keys and the stack pointer to the relevant `T_CONST`, `T_ENUM_CASE`, `T_VARIABLE` or `T_FUNCTION` token as the value.

As these methods all used the same `analyzeOOStructure()` method under the hood and the results of that method are cached, the method are highly optimized for performance.

If a sniff needs to search for a named constant/enum case/property/method in an OO structure, in most cases, these methods should be the recommended way for finding the declaration, instead of the sniff attempting to do this itself.

Includes extensive unit tests.
@jrfnl
Copy link
Member Author

jrfnl commented May 23, 2024

Rebased without changes, other than squashing the "use new exceptions" commit into the base commit.
Marking as ready as #600 has been merged now. Merging once the build passes.

@jrfnl jrfnl force-pushed the objectdeclarations/new-getmethods-utility branch from 284714b to c16c199 Compare May 23, 2024 08:52
@jrfnl jrfnl marked this pull request as ready for review May 23, 2024 08:52
@jrfnl jrfnl merged commit a1e04b3 into develop May 23, 2024
54 checks passed
@jrfnl jrfnl deleted the objectdeclarations/new-getmethods-utility branch May 23, 2024 11:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ObjectDeclarations::getFunctions()
1 participant