From 1e45f9ddfbc64eb28a2c24696ca547a1bdb11707 Mon Sep 17 00:00:00 2001 From: Hari Darshan Gorana Date: Mon, 24 Apr 2023 15:55:50 +0530 Subject: [PATCH 1/5] feat: Improve code completion in PhpStorm Signed-off-by: Hari Darshan Gorana --- .phpstorm.meta.php | 66 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 10 ++++++- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 .phpstorm.meta.php diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php new file mode 100644 index 00000000000..bc8691cccca --- /dev/null +++ b/.phpstorm.meta.php @@ -0,0 +1,66 @@ + \Github\Api\CurrentUser::class, + "current_user" => \Github\Api\CurrentUser::class, + "currentUser" => \Github\Api\CurrentUser::class, + "codeOfConduct" => \Github\Api\Miscellaneous\CodeOfConduct::class, + "deployment" => \Github\Api\Deployment::class, + "deployments" => \Github\Api\Deployment::class, + "ent" => \Github\Api\Enterprise::class, + "enterprise" => \Github\Api\Enterprise::class, + "emojis" => \Github\Api\Miscellaneous\Emojis::class, + "git" => \Github\Api\GitData::class, + "git_data" => \Github\Api\GitData::class, + "gitData" => \Github\Api\GitData::class, + "gist" => \Github\Api\Gists::class, + "gists" => \Github\Api\Gists::class, + "gitignore" => \Github\Api\Miscellaneous\Gitignore::class, + "apps" => \Github\Api\Apps::class, + "issue" => \Github\Api\Issue::class, + "issues" => \Github\Api\Issue::class, + "markdown" => \Github\Api\Markdown::class, + "licenses" => \Github\Api\Miscellaneous\Licenses::class, + "notification" => \Github\Api\Notification::class, + "notifications" => \Github\Api\Notification::class, + "organization" => \Github\Api\Organization::class, + "organizations" => \Github\Api\Organization::class, + "org_project" => \Github\Api\Organization\Projects::class, + "orgProject" => \Github\Api\Organization\Projects::class, + "org_projects" => \Github\Api\Organization\Projects::class, + "orgProjects" => \Github\Api\Organization\Projects::class, + "organization_project" => \Github\Api\Organization\Projects::class, + "organizationProject" => \Github\Api\Organization\Projects::class, + "organization_projects" => \Github\Api\Organization\Projects::class, + "organizationProjects" => \Github\Api\Organization\Projects::class, + "pr" => \Github\Api\PullRequest::class, + "pulls" => \Github\Api\PullRequest::class, + "pullRequest" => \Github\Api\PullRequest::class, + "pull_request" => \Github\Api\PullRequest::class, + "pullRequests" => \Github\Api\PullRequest::class, + "pull_requests" => \Github\Api\PullRequest::class, + "rateLimit" => \Github\Api\RateLimit::class, + "rate_limit" => \Github\Api\RateLimit::class, + "repo" => \Github\Api\Repo::class, + "repos" => \Github\Api\Repo::class, + "repository" => \Github\Api\Repo::class, + "repositories" => \Github\Api\Repo::class, + "search" => \Github\Api\Search::class, + "team" => \Github\Api\Organization\Teams::class, + "teams" => \Github\Api\Organization\Teams::class, + "member" => \Github\Api\Organization\Members::class, + "members" => \Github\Api\Organization\Members::class, + "user" => \Github\Api\User::class, + "users" => \Github\Api\User::class, + "authorization" => \Github\Api\Authorizations::class, + "authorizations" => \Github\Api\Authorizations::class, + "meta" => \Github\Api\Meta::class, + "graphql" => \Github\Api\GraphQL::class, + "outsideCollaborators" => \Github\Api\Organization\OutsideCollaborators::class, + "outside_collaborators" => \Github\Api\Organization\OutsideCollaborators::class, + ])); +} diff --git a/README.md b/README.md index de79112b4f8..9a493a9229b 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ composer require knplabs/github-api:^3.0 guzzlehttp/guzzle:^7.0.1 http-interop/h ## Advanced install -We are decoupled from any HTTP messaging client with help by [HTTPlug](https://httplug.io). +We are decoupled from any HTTP messaging client with help by [HTTPlug](https://httplug.io). ### Using a different http client @@ -53,6 +53,14 @@ $client = Client::createWithHttpClient(new HttplugClient()); Read more about [using different clients in our docs](doc/customize.md). +## Code Completion (JetBrains PhpStorm) +To improve code-completion and ux approach in PhpStorm, advanced metadata is now added. + +![Auto-Complete Api Names](https://user-images.githubusercontent.com/1327607/229752632-f1e4a1b3-a9f8-48be-9beb-d41927e96cde.png) + +![Auto-Complete Api Methods](https://user-images.githubusercontent.com/1327607/229752677-3a2f3dc8-51d7-45b7-a7d0-0cde7ac145f7.png) + + ## Framework integrations ### Laravel From 490ad82f72e5a43e40c3b00849b49b8b3372ec73 Mon Sep 17 00:00:00 2001 From: Hari Darshan Gorana Date: Mon, 22 May 2023 12:49:57 +0530 Subject: [PATCH 2/5] feat: add script to auto-generate `.phpstorm.meta.php` file Signed-off-by: Hari Darshan Gorana --- .phpstorm.meta.php | 66 --------------------------------- .phpstorm.meta.stub | 10 +++++ composer.json | 6 ++- generate-phpstorm-meta-file.php | 26 +++++++++++++ 4 files changed, 40 insertions(+), 68 deletions(-) delete mode 100644 .phpstorm.meta.php create mode 100644 .phpstorm.meta.stub create mode 100644 generate-phpstorm-meta-file.php diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php deleted file mode 100644 index bc8691cccca..00000000000 --- a/.phpstorm.meta.php +++ /dev/null @@ -1,66 +0,0 @@ - \Github\Api\CurrentUser::class, - "current_user" => \Github\Api\CurrentUser::class, - "currentUser" => \Github\Api\CurrentUser::class, - "codeOfConduct" => \Github\Api\Miscellaneous\CodeOfConduct::class, - "deployment" => \Github\Api\Deployment::class, - "deployments" => \Github\Api\Deployment::class, - "ent" => \Github\Api\Enterprise::class, - "enterprise" => \Github\Api\Enterprise::class, - "emojis" => \Github\Api\Miscellaneous\Emojis::class, - "git" => \Github\Api\GitData::class, - "git_data" => \Github\Api\GitData::class, - "gitData" => \Github\Api\GitData::class, - "gist" => \Github\Api\Gists::class, - "gists" => \Github\Api\Gists::class, - "gitignore" => \Github\Api\Miscellaneous\Gitignore::class, - "apps" => \Github\Api\Apps::class, - "issue" => \Github\Api\Issue::class, - "issues" => \Github\Api\Issue::class, - "markdown" => \Github\Api\Markdown::class, - "licenses" => \Github\Api\Miscellaneous\Licenses::class, - "notification" => \Github\Api\Notification::class, - "notifications" => \Github\Api\Notification::class, - "organization" => \Github\Api\Organization::class, - "organizations" => \Github\Api\Organization::class, - "org_project" => \Github\Api\Organization\Projects::class, - "orgProject" => \Github\Api\Organization\Projects::class, - "org_projects" => \Github\Api\Organization\Projects::class, - "orgProjects" => \Github\Api\Organization\Projects::class, - "organization_project" => \Github\Api\Organization\Projects::class, - "organizationProject" => \Github\Api\Organization\Projects::class, - "organization_projects" => \Github\Api\Organization\Projects::class, - "organizationProjects" => \Github\Api\Organization\Projects::class, - "pr" => \Github\Api\PullRequest::class, - "pulls" => \Github\Api\PullRequest::class, - "pullRequest" => \Github\Api\PullRequest::class, - "pull_request" => \Github\Api\PullRequest::class, - "pullRequests" => \Github\Api\PullRequest::class, - "pull_requests" => \Github\Api\PullRequest::class, - "rateLimit" => \Github\Api\RateLimit::class, - "rate_limit" => \Github\Api\RateLimit::class, - "repo" => \Github\Api\Repo::class, - "repos" => \Github\Api\Repo::class, - "repository" => \Github\Api\Repo::class, - "repositories" => \Github\Api\Repo::class, - "search" => \Github\Api\Search::class, - "team" => \Github\Api\Organization\Teams::class, - "teams" => \Github\Api\Organization\Teams::class, - "member" => \Github\Api\Organization\Members::class, - "members" => \Github\Api\Organization\Members::class, - "user" => \Github\Api\User::class, - "users" => \Github\Api\User::class, - "authorization" => \Github\Api\Authorizations::class, - "authorizations" => \Github\Api\Authorizations::class, - "meta" => \Github\Api\Meta::class, - "graphql" => \Github\Api\GraphQL::class, - "outsideCollaborators" => \Github\Api\Organization\OutsideCollaborators::class, - "outside_collaborators" => \Github\Api\Organization\OutsideCollaborators::class, - ])); -} diff --git a/.phpstorm.meta.stub b/.phpstorm.meta.stub new file mode 100644 index 00000000000..02620a1b914 --- /dev/null +++ b/.phpstorm.meta.stub @@ -0,0 +1,10 @@ +parse($reflection->getDocComment()); + +$replacements = ""; +foreach($meta['methods'] as $method) { + $replacements .= "\"{$method['name']}\" => \Github\\{$method['return_type']}::class,".PHP_EOL; +} + +$str = file_get_contents('./.phpstorm.meta.stub'); +$str = str_replace('$METHODS$', $replacements, $str); +file_put_contents('.phpstorm.meta.1.php', $str); + + + + + + + From 75e7c0b185dc501ef04f26dab0a4b9e0e625d316 Mon Sep 17 00:00:00 2001 From: Hari Darshan Gorana Date: Mon, 22 May 2023 12:55:18 +0530 Subject: [PATCH 3/5] chore(styleci): apply styleci patch Signed-off-by: Hari Darshan Gorana --- generate-phpstorm-meta-file.php | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/generate-phpstorm-meta-file.php b/generate-phpstorm-meta-file.php index d96016cd02b..a6b76095094 100644 --- a/generate-phpstorm-meta-file.php +++ b/generate-phpstorm-meta-file.php @@ -9,18 +9,11 @@ $parser = new PHPDocParser(PhpDocumentor::tags()); $meta = $parser->parse($reflection->getDocComment()); -$replacements = ""; -foreach($meta['methods'] as $method) { +$replacements = ''; +foreach ($meta['methods'] as $method) { $replacements .= "\"{$method['name']}\" => \Github\\{$method['return_type']}::class,".PHP_EOL; } $str = file_get_contents('./.phpstorm.meta.stub'); $str = str_replace('$METHODS$', $replacements, $str); file_put_contents('.phpstorm.meta.1.php', $str); - - - - - - - From 8a5662f5c8874b8db32c5e68d5108ff5c67d8b9f Mon Sep 17 00:00:00 2001 From: Hari Darshan Gorana Date: Mon, 22 May 2023 13:19:11 +0530 Subject: [PATCH 4/5] chore(deps): replace `jasny/phpdoc-parser` with `phpstan/phpdoc-parser` dep Signed-off-by: Hari Darshan Gorana --- composer.json | 2 +- generate-phpstorm-meta-file.php | 23 ++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index fd03cf85496..db6473b4982 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,7 @@ "psr/http-message": "^1.0", "symfony/polyfill-php80": "^1.17", "symfony/deprecation-contracts": "^2.2|^3.0", - "jasny/phpdoc-parser": "^1.0" + "phpstan/phpdoc-parser": "^1.21" }, "require-dev": { "symfony/cache": "^5.1.8", diff --git a/generate-phpstorm-meta-file.php b/generate-phpstorm-meta-file.php index a6b76095094..2e4b52c708c 100644 --- a/generate-phpstorm-meta-file.php +++ b/generate-phpstorm-meta-file.php @@ -1,19 +1,28 @@ parse($reflection->getDocComment()); + +$lexer = new Lexer(); +$constExprParser = new ConstExprParser(); +$typeParser = new TypeParser($constExprParser); +$phpDocParser = new PhpDocParser($typeParser, $constExprParser); + +$tokens = new TokenIterator($lexer->tokenize($reflection->getDocComment())); +$phpDocNode = $phpDocParser->parse($tokens); $replacements = ''; -foreach ($meta['methods'] as $method) { - $replacements .= "\"{$method['name']}\" => \Github\\{$method['return_type']}::class,".PHP_EOL; +foreach ($phpDocNode->getTagsByName('@method') as $node) { + $replacements .= "\"{$node->value->methodName}\" => \Github\\{$node->value->returnType->name}::class,".PHP_EOL; } $str = file_get_contents('./.phpstorm.meta.stub'); $str = str_replace('$METHODS$', $replacements, $str); -file_put_contents('.phpstorm.meta.1.php', $str); +file_put_contents('.phpstorm.meta.php', $str); From d2a9e42f3a837ec5e2e58bb8910fbfd25d8a7cea Mon Sep 17 00:00:00 2001 From: Hari Darshan Gorana Date: Sun, 24 Mar 2024 21:22:49 +0530 Subject: [PATCH 5/5] chore: move `phpstan/phpdoc-parser` to require-dev Signed-off-by: Hari Darshan Gorana --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index dc030111424..d49b0132a83 100644 --- a/composer.json +++ b/composer.json @@ -29,8 +29,7 @@ "psr/http-factory-implementation": "^1.0", "psr/http-message": "^1.0|^2.0", "symfony/polyfill-php80": "^1.17", - "symfony/deprecation-contracts": "^2.2|^3.0", - "phpstan/phpdoc-parser": "^1.21" + "symfony/deprecation-contracts": "^2.2|^3.0" }, "require-dev": { "symfony/cache": "^5.1.8", @@ -42,7 +41,8 @@ "phpstan/extension-installer": "^1.0.5", "phpstan/phpstan-deprecation-rules": "^0.12.5", "phpunit/phpunit": "^8.5 || ^9.4", - "symfony/phpunit-bridge": "^5.2" + "symfony/phpunit-bridge": "^5.2", + "phpstan/phpdoc-parser": "^1.27" }, "autoload": { "psr-4": { "Github\\": "lib/Github/" }