Visual Studio代码PHP Intelephense继续显示不必要的错误

时间:2019-12-03 03:42:02

标签: php laravel visual-studio-code

在我获得了PHP Intelephense的最新更新之后,intelephense继续显示我的路线(以及其他类)的未定义符号错误,以前没有这样的错误,这困扰着我。

这是错误屏幕截图:

enter image description here

这是我的代码:

SELECT LISTAGG( "Id", ' ' DISTINCT) WITHIN GROUP (ORDER BY "Id")  "Id"
  , LISTAGG("Course", ' ') WITHIN GROUP (ORDER BY "Id")  "Course"
  , LISTAGG("Day/s", ' ') WITHIN GROUP (ORDER BY "Id")  "Day/s"
  , "Sect"
  , LISTAGG("Class Nbr", ' ' DISTINCT) WITHIN GROUP (ORDER BY "Id")  as "Class Nbr" 
FROM "sample_sheet_Copy"
GROUP BY "Sect"

实际上这段代码中没有错误,但是智能手机不断显示错误,因此有办法解决此问题吗?

17 个答案:

答案 0 :(得分:112)

1.3.0版具有IMO缺陷。
降级到1.2.3版解决了我的问题。

我在

  • Laravel 5.1
  • PHP 5.6.40

Downgrade to Version 1.2.3

答案 1 :(得分:57)

Intelephense 1.3添加了未定义的类型,函数,常量,类常量,方法和属性诊断,而以前在1.2中只有未定义的变量诊断。

某些框架的编写方式为用户提供了方便的快捷方式,但使静态分析引擎难以发现运行时可用的符号。

https://github.com/barryvdh/laravel-ide-helper之类的存根生成器在这里填补了空白,与Laravel一起使用,可以通过提供易于发现的符号的具体定义来处理许多错误诊断。

不过,PHP是一种非常灵活的语言,根据代码的编写方式,可能还会有其他一些错误的未定义符号实例。因此,从1.3.3开始,intelephense具有配置选项,可以启用/禁用每种未定义符号类别,以适合工作区和编码样式。

这些选项是: intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

将所有这些设置为false(intelephense.diagnostics.undefinedVariables除外)将产生1.2版的行为。请参见VSCode设置UI并搜索intelephense

答案 2 :(得分:16)

您不需要降级,您可以:

在设置中禁用未定义​​的符号诊断-“ intelephense.diagnostics.undefinedSymbols”:false。

或使用为laravel外墙添加存根的ide帮助程序。参见https://github.com/barryvdh/laravel-ide-helper

答案 3 :(得分:14)

1.3.1已修复。

只需更新您的扩展程序,您就应该很好

答案 4 :(得分:11)

use Illuminate\Support\Facades\Route;

我只是导入此文件,警告对我而言消失了。

  • Larvel 6 +
  • vscode版本1.40.2
  • php智能1.3.1

答案 5 :(得分:6)

否,仅在自动更新Intelephense扩展名后才会发生错误。

要解决此问题,您可以通过单击Intelephense扩展中的“安装另一个版本”将其降级到以前的版本。版本1.2.3没有错误。

答案 6 :(得分:6)

如果在添加新的Vendor类后立即看到此消息,请确保运行VScode命令(control-shift-P)Index Workspace

答案 7 :(得分:6)

如果您知道问题仅限于Facades并且运行Laravel 5.5或更高版本,则此解决方案可能会对您有所帮助。

安装laravel-ide-helper

composer require --dev barryvdh/laravel-ide-helper

在您的AppServiceProvider中添加此条件语句以注册助手类。

public function register()
{
    if ($this->app->environment() !== 'production') {
        $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
    }
    // ...
}

然后运行php artisan ide-helper:generate生成一个文件,以帮助IDE理解Facades。您将需要重新启动Visual Studio代码。

参考

https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/16

https://github.com/barryvdh/laravel-ide-helper

答案 8 :(得分:4)

这实际上是您的编辑器理解Laravel的一组配置。

如果要手动配置所有配置,则为repo。这适用于VS代码和PhpStorm。

或者,如果您愿意,也可以下载此package。(我创建的)建议您全局安装。

然后运行andylaravel setupIDE。这将根据拳头仓库为您配置所有内容。

答案 9 :(得分:4)

对于那些希望保持简单,愚蠢的人而言;如果您希望摆脱通知,而不是安装帮助程序或降级,只需添加以下内容即可禁用settings.json中的错误:

"intelephense.diagnostics.undefinedTypes": false

答案 10 :(得分:3)

我在这里解决了

打开扩展程序设置:

enter image description here

然后搜索要更改的变量,然后取消选中/选中它

enter image description here

您应该考虑的变量是:

intelephense.diagnostics.undefinedTypes 
intelephense.diagnostics.undefinedFunctions         
intelephense.diagnostics.undefinedConstants         
intelephense.diagnostics.undefinedClassConstants 
intelephense.diagnostics.undefinedMethods 
intelephense.diagnostics.undefinedProperties 
intelephense.diagnostics.undefinedVariables

答案 11 :(得分:3)

就我而言,由于某些原因,在VS Code设置中禁用了vendor文件夹:

    "intelephense.files.exclude": [
        "**/.git/**",
        "**/.svn/**",
        "**/.hg/**",
        "**/CVS/**",
        "**/.DS_Store/**",
        "**/node_modules/**",
        "**/bower_components/**",
        "**/vendor/**", <-- remove this line!
        "**/resources/views/**"
    ],

通过删除包含vendor文件夹的行,它可以在版本Intelephense 1.5.4上正常运行

答案 12 :(得分:1)

1.3.3已修复它。 只需更新您的扩展程序即可。

答案 13 :(得分:1)

对于遇到这些问题并且不愿意禁用一整套检查的人,有一种方法将您自己的自定义签名传递给Intelephense

从Intelephese repo的评论中复制(@KapitanOczywisty撰写):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

对于单个工作空间,这非常简单,您必须创建.php文件 带有所有签名,并且智能签名将对它们进行索引。

如果您想在全球范围内添加存根,仍然可以,但是我不确定是否 它的目的是功能。即使intelephense.stubs发出警告 您实际上可以在其中输入任何文件夹名称。

{   
   "intelephense.stubs": [
       // ...
       "/path/to/your/stub"   
   ] 
} 

注意:此设置更改会刷新存根。

您可以在此处查看内置存根: https://github.com/JetBrains/phpstorm-stubs

就我而言,我需要dspec的describebeforeEachit ...不会突出显示为错误,因此我只包含了带有签名{{ 1}}在我的VSCode的工作区设置中,其中包含我需要的函数声明:

/directories_and_paths/app/vendor/bin/dspec

答案 14 :(得分:0)

我遇到了同样的问题,以下问题似乎已经解决了。

a)已更新至最新版本1.3.5,并重新启用了所有诊断设置。

我仍然收到消息

b)将带有相关库的供应商文件夹添加到工作区

这似乎已经解决了问题。

答案 15 :(得分:0)

 use Illuminate\Support\Facades\Route;

添加上面的命名空间

答案 16 :(得分:-2)

版本1.3.2中已解决的问题

无需降级。