coc-intelephense
coc-intelephense copied to clipboard
intelephense (PHP language server) extension for coc.nvim. intelephense’s various LSP features and this extension's additional features are available.
coc-intelephense
fork from a bmewburn/vscode-intelephense | PHP Intelephense and more feature.
intelephense (PHP language server) extension for coc.nvim. intelephense's various LSP features and this extension's additional features are available.
Install
CocInstall:
:CocInstall @yaegassy/coc-intelephense
scoped packages
vim-plug:
Plug 'yaegassy/coc-intelephense', {'do': 'yarn install --frozen-lockfile'}
Enabling the PREMIUM feature
Prepare a licence.txt
file containing the licence key and place it in a designated location.
$ node -e "console.log(os.homedir() + '/intelephense/licence.txt')"
/Users/username/intelephense/licence.txt
[DEPRECATED]: Or set intelephense.licenceKey
in "coc-settings.json"
{
// ...snip
"intelephense.licenceKey": "LICENCEKEYSAMPLE",
// ...snip
}
For more information, please check this link.
Configuration options
For additional feature of coc-intelephese:
-
intelephense.enable
: Enable coc-intelephense extension, defaulttrue
-
intelephense.path
: Path to intelephense module.~
and$HOME
, etc. can also be used. If there is no setting, the built-in module will be used. e.g./path/to/node_modules/intelephense
. default:""
-
intelephense.client.diagnosticsIgnoreErrorFeature
: Whether to enable the PHPDoc tag (// @intelephense-ignore-line
,/** @intelephense-ignore-next-line */
) feature and ignore errors, default:false
| DEMO- This feature is a proprietary implementation of
coc-intelephense
. This feature will be removed when the dedicated feature is added in the upstream'svscode-intelephense
orintelephense
language server. - I made it an ignore comment like
phpstan
, Please refer to this page for usage. https://phpstan.org/user-guide/ignoring-errors#ignoring-in-code-using-phpdocs
- This feature is a proprietary implementation of
-
intelephense.client.autoCloseDocCommentDoSuggest
: When/**
is entered,*/
is automatically inserted (/**| */
). Then, continue, automatically triggers completion of PHPDoc comments, default:true
| DEMO -
intelephense.client.disableScaffoldCompletion
: Disable scaffold completion (client). Typingclass_scaffold
,interface_scaffold
,trait_scaffold
,enum_scaffold
ortest_scaffold
will output completion suggestions. This completion feature will only work on the first line of the file, default:false
| DEMO -
intelephense.client.disableSnippetsCompletion
: Disable snippets completion only (client), default:false
-
intelephense.client.snippetsCompletionExclude
: Exclude specific prefix in snippet completion, e.g.["class", "fun"]
, default:[]
-
intelephense.client.disableCodeLens
: Disable code lens only (client), default:false
-
intelephense.client.codelensProvider
: Provider for CodeLens. Possible options includephpunit
andpest
, default:"phpunit"
-
intelephense.client.disableInlayHints
: Disable inlay hints only (client), default:true
-
intelephense.client.disableAddIskeyword
: Disable the feature of the extension to addiskeyword
, default:false
-
intelephense.server.disableCompletion
: Disable completion only (server), default:false
-
intelephense.server.disableDefinition
: Disable definition only (server), default:false
-
intelephense.composer.path
: Path to composer command. default:composer
-
intelephense.composer.runCommandList
: Set the subcommand of the composer you want to execute, default:["dump-autoload", "clear-cache", "install", "update"]
-
intelephense.composer.runCommandPlusList
: Set the subcommand of the composer you want to execute. Additional strings can be entered and executed in the subcommand. default:["require", "require --dev", "remove", "remove --dev", "update"]
-
intelephense.composer.enableSplitRight
: Use vertical belowright for composer terminal window, default:false
-
intelephense.artisan.enableSplitRight
: Use vertical belowright for artisan terminal window, default:false
-
intelephense.symfony.enableSplitRight
: Use vertical belowright for symfony terminal window, default:false
-
intelephense.phpunit.path
: Path to phpunit command. If there is no setting, the vendor/bin/phpunit will be used, default:""
-
intelephense.phpunit.colors
: Use colors in output (--colors), default:false
-
intelephense.phpunit.debug
: Display debugging information (--debug), default:false
-
intelephense.phpunit.codeLensTitle
: CodeLens title. Can be changed to any display, default:">> [Run PHPUnit]"
-
intelephense.phpunit.enableSplitRight
: Use vertical belowright for phpunit terminal window, default:false
-
intelephense.pest.path
: Path to Pest command. If there is no setting, the vendor/bin/pest will be used, default:""
-
intelephense.pest.doNotCacheResult
: Do not write test results to cache file (--do-not-cache-result), default:true
-
intelephense.pest.codeLensTitle
: CodeLens title. Can be changed to any display, default:">> [Run Pest]"
-
intelephense.pest.enableSplitRight
: Use vertical belowright for pest terminal window, default:false
-
intelephense.inlineParameters.showDollarSign
: Show the$
character before PHP parameter names, default:false
-
intelephense.progress.enable
: Enable progress window for indexing, If false, display with echo messages, default:true
| DEMO
Same configuration as vscode-intelephense:
-
intelephense.compatibility.correctForBaseClassStaticUnionTypes
: Resolves 'BaseClass|static' union types to 'static' instead of 'BaseClass', default:true
-
intelephense.compatibility.correctForArrayAccessArrayAndTraversableArrayUnionTypes
: Resolves 'ArrayAccess' and 'Traversable' implementations that are unioned with a typed array to generic syntax. eg 'ArrayAccessOrTraversable|ElementType[]' => 'ArrayAccessOrTraversable<mixed, ElementType>', default:true
-
intelephense.files.maxSize
: Maximum file size in bytes, default:5000000
-
intelephense.files.associations
: Configure glob patterns to make files available for language server features. Inherits from files.associations, default:["*.php", "*.phtml"]
-
intelephense.files.exclude
: Configure glob patterns to exclude certain files and folders from all language server features. Inherits from files.exclude, default:["**/.git/**", "**/.svn/**", "**/.hg/**", "**/CVS/**", "**/.DS_Store/**", "**/node_modules/**", "**/bower_components/**", "**/vendor/**/{Tests,tests}/**", "**/.history/**", "**/vendor/**/vendor/**"]
-
intelephense.stubs
: Configure stub files for built in symbols and common extensions. The default setting includes PHP core and all bundled extensions, default: Omitted due to the large number of settings..., See configuration in package.json -
intelephense.completion.insertUseDeclaration
: Use declarations will be automatically inserted for namespaced classes, traits, interfaces, functions, and constants, default:true
-
intelephense.completion.fullyQualifyGlobalConstantsAndFunctions
: Global namespace constants and functions will be fully qualified (prefixed with a backslash), default:false
-
intelephense.completion.triggerParameterHints
: Method and function completions will include parentheses and trigger parameter hints, default:true
-
intelephense.completion.maxItems
: The maximum number of completion items returned per request, default:100
-
intelephense.format.enable
: Enables formatting, default:true
-
intelephense.format.braces
: Controls formatting style of braces, valid option"psr12", "allman", "k&r"
, default:psr12
-
intelephense.environment.documentRoot
: The directory of the entry point to the application (directory of index.php). Can be absolute or relative to the workspace folder. Used for resolving script inclusion and path suggestions, default:null
-
intelephense.environment.includePaths
: include paths (as individual path items) as defined in the include_path ini setting or paths to external libraries. Can be absolute or relative to the workspace folder. Used for resolving script inclusion and/or adding external symbols to folder, default:null
-
intelephense.environment.phpVersion
: A semver compatible string that represents the target PHP version. Used for providing version appropriate suggestions and diagnostics. PHP 5.3.0 and greater supported, default:"8.1.0"
-
intelephense.environment.shortOpenTag
: When enabled<?
will be parsed as a PHP open tag. Defaults to true, default:true
-
intelephense.diagnostics.enable
: Enables diagnostics, default:true
-
intelephense.diagnostics.run
: Controls when diagnostics are run, valid option"onType", "onSave"
, default:"onType"
-
intelephense.diagnostics.embeddedLanguages
: Enables diagnostics in embedded languages, default:true
-
intelephense.diagnostics.undefinedSymbols
: DEPRECATED. Use the setting for each symbol category, default:true
-
intelephense.diagnostics.undefinedVariables
: Enables undefined variable diagnostics, default:true
-
intelephense.diagnostics.undefinedTypes
: Enables undefined class, interface and trait diagnostics, default:true
-
intelephense.diagnostics.undefinedFunctions
: Enables undefined function diagnostics, default:true
-
intelephense.diagnostics.undefinedConstants
: Enables undefined constant diagnostics, default:true
-
intelephense.diagnostics.undefinedClassConstants
: Enables undefined class constant diagnostics, default:true
-
intelephense.diagnostics.undefinedMethods
: Enables undefined method diagnostics, default:true
-
intelephense.diagnostics.undefinedProperties
: Enables undefined static property diagnostics, default:true
-
intelephense.diagnostics.unusedSymbols
: Enables unused variable, private member, and import diagnostics, default:true
-
intelephense.diagnostics.unexpectedTokens
: Enables unexpected token diagnostics, default:true
-
intelephense.diagnostics.duplicateSymbols
: Enables duplicate symbol diagnostics, default:true
-
intelephense.diagnostics.argumentCount
: Enables argument count diagnostics, default:true
-
intelephense.diagnostics.typeErrors
: Enables diagnostics on type compatibility of arguments, property assignments, and return statements where types have been declared, default:true
-
intelephense.diagnostics.deprecated
: Enables deprecated diagnostics, default:true
-
intelephense.diagnostics.languageConstraints
: Enables reporting of various language constraint errors, default:true
-
intelephense.diagnostics.implementationErrors
: Enables reporting of problems associated with method and class implementations. For example, unimplemented methods or method signature incompatibilities, default:true
-
intelephense.runtime
: Path to a Node.js executable. Use this if you wish to use a different version of Node.js, default:null
-
intelephense.maxMemory
: Maximum memory (in MB) that the server should use. On some systems this may only have effect when runtime has been set. Minimum 256, default:null
-
intelephense.licenceKey
: DEPRECATED. Don't use this, default:""
-
intelephense.telemetry.enabled
: Anonymous usage and crash data will be sent to Azure Application Insights, default:null
-
intelephense.rename.exclude
: Glob patterns to exclude files and folders from having symbols renamed. Rename operation will fail if references and/or definitions are found in excluded files/folders, default:["**/vendor/**"]
-
intelephense.rename.namespaceMode
: Controls the scope of a namespace rename operation, valid option"single", "all"
, default:"single"
-
intelephense.references.exclude
: Glob patterns matching files and folders that should be excluded from references search, default:["**/vendor/**"]
-
intelephense.phpdoc.returnVoid
: Adds@return void
to auto generated phpdoc for definitions that do not return a value, default:true
-
intelephense.phpdoc.textFormat
: Auto generated phpdoc is returned in {snippet, plain text}, valid option"snippet", "text"
, default:"snippet"
-
intelephense.phpdoc.classTemplate
: An object that describes the format of generated class/interface/trait phpdoc. The following snippet variables are available: SYMBOL_NAME; SYMBOL_KIND; SYMBOL_TYPE; SYMBOL_NAMESPACE, default: See configuration in package.json -
intelephense.phpdoc.propertyTemplate
: An object that describes the format of generated property phpdoc. The following snippet variables are available: SYMBOL_NAME; SYMBOL_KIND; SYMBOL_TYPE; SYMBOL_NAMESPACE, default: See configuration in package.json -
intelephense.phpdoc.functionTemplate
: An object that describes the format of generated function/method phpdoc. The following snippet variables are available: SYMBOL_NAME; SYMBOL_KIND; SYMBOL_TYPE; SYMBOL_NAMESPACE, default: See configuration in package.json -
intelephense.phpdoc.useFullyQualifiedNames
: Fully qualified names will be used for types when true. When false short type names will be used and imported where appropriate. Overrides intelephense.completion.insertUseDeclaration, default:true
-
intelephense.trace.server
: Traces the communication between VSCode and the intelephense language server, valid option"off", "messages", "verbose"
, default:"off"
Commands
Command List:
:CocCommand [CommandName]
e.g. :CocCommand intelephense.phpunit.projectTest
-
intelephense.index.workspace
: Index workspace -
intelephense.cancel.indexing
: Cancel indexing -
intelephense.composer.runCommand
: Run selected composer command -
intelephense.composer.runCommandPlus
: Enter and run additional strings to the selected composer commands -
intelephense.composer.runScriptsCommand
: Run selected composer script- Select and run the script defined in the "scripts section" of
composer.json
. Thepre-...
andpost-...
event scripts are excluded from the list. - DEMO
- Select and run the script defined in the "scripts section" of
-
intelephense.artisan.runCommand
: Run Artisan command | DEMO -
intelephense.symfony.runCommand
: Run Symfony command -
intelephense.phpunit.projectTest
: Run PHPUnit for current project -
intelephense.phpunit.fileTest
: Run PHPUnit for current file -
intelephense.phpunit.singleTest
: Run PHPUnit for single (nearest) test -
intelephense.pest.projectTest
: Run Pest for current project -
intelephense.pest.fileTest
: Run Pest for current file -
intelephense.pest.singleTest
: Run Pest for single (nearest) test -
intelephense.fixClassName
: Fix class name based on file name | DEMO -
intelephense.fixNamespace
: Fix namespace based on the composer configuration | DEMO -
intelephense.completeConstructor
: Complete the assignments and add properties for an incomplete constructor | DEMO
Example of Vim command and key mapping:
Vim commands can be defined and executed or key mappings can be set and used.
" Quickly view a list of all coc.nvim commands
nnoremap <silent> <C-p> :<C-u>CocCommand<CR>
" Run PHPUnit for current project
command! -nargs=0 PHPUnit :call CocAction('runCommand', 'intelephense.phpunit.projectTest')
" Run PHPUnit for current file
command! -nargs=0 PHPUnitCurrent :call CocAction('runCommand', 'intelephense.phpunit.fileTest', ['%'])
" Run PHPUnit for single (nearest) test
nnoremap <leader>te :call CocAction('runCommand', 'intelephense.phpunit.singleTest')<CR>
CodeLens (Neovim only)
Feature:
Test file for "PHPUnit" or "Pest", allowing execution of a single test method. CodeLens appears at the top of the test method.
coc-settings.json:
By default, codeLens.enable
is set to false
, which disables it.
Change the setting to true
to enable it.
{
"codeLens.enable": true
}
If you want to use "Pest", change the intelephense.client.codelensProvider
setting to pest
(default: phpunit
).
{
"intelephense.client.codelensProvider": "pest"
}
Example key mapping (CodeLens related):
nmap <silent> gl <Plug>(coc-codelens-action)
Misc:
"CodeLens" does not work with "Vim8" due to coc.nvim specifications.
intelephense.phpunit.singleTest
command and intelephense.pest.singleTest
command are available, so please use them.
Code Actions
Example key mapping (Code Action related):
nmap <silent> ga <Plug>(coc-codeaction-line)
xmap <silent> ga <Plug>(coc-codeaction-selected)
nmap <silent> <leader>a <Plug>(coc-codeaction-cursor)
nmap <silent> gA <Plug>(coc-codeaction)
Code Actions (Client side):
-
Open 'php.net' for 'xxxx'
| DEMO -
Add @intelephense-ignore-line
| DEMO -
Add @intelephense-ignore-next-line
| DEMO -
Insert PHP Getter
| DEMO -
Insert PHP Setter
| DEMO -
Insert PHP Getter & Setter
| DEMO -
Change Visibility
| DEMO -
Remove all unused imports for "use" statetment
| DEMO
Code Actions (Server side):
-
use NAMESPACE\...\CLASS
-
Implement all abstract methods for '...'
-
Add PHPDoc for '...'
- and more...
- Other code actions provided by the intelephehse language server
[Experimental] Inlay Hints (Client Base)
"Inlay Hints" does not work with "Vim8" due to coc.nvim
specifications.
-
inlineParametersInlayHintsFeature
| DEMO- By default, this feature is disabled
- Set
"intelephense.client.disableInlayHints"
tofalse
to use the feature.
TIPS
workspaceFolders
Depending on the project like mono repo or how Vim/Neovim is started, workspaceFolders
may not be recognized correctly.
To make coc.nvim recognize workspaceFolders
correctly, you can set b:coc_root_patterns
in .vimrc/init.vim
Example:
au FileType php let b:coc_root_patterns = ['.git', '.env', 'composer.json', 'artisan']
For more information, check this coc.nvim's wiki.
Thanks
License
MIT
This extension is built with create-coc-extension