如何在VSCode的intelephense中定义一个未定义的函数?

3
Intelephense会显示像“未知类型”和“未知函数”这样的错误,但我不知道如何修复它们。
我的项目(一个TYPO3组合安装)有一个“public”文件夹,这就是为什么我按照设置它为./public的方式配置了intelephense的intelephense.environment.documentRoot选项。
第一张截图显示了项目的页面树,并打开了发生错误的部分。

Project tree

当我打开"function.php"时,intelephense会提示我一个"未定义类型 'Aimeos\Map'"的错误。

"Undefined type" error

Map是在function.php文件旁边定义的,看起来像这样:

The Map Class

代码中还有其他地方,Intelephense会提示我出现“未定义函数'map'”:

Other code snippets with error message

我看了一下Intelephense的“function”模板,但是我不知道应该放什么。也不知道是否还需要定义类模板或其他内容。
这是我为Intelephense配置的VSCode:

VSCode config

可以看到,我试图使用否定符号“!”排除“vendor/aimeos”文件,但我认为这不是Intelephense中已知的配置值。
我需要做什么才能使Intelephense正常工作呢? 谢谢!

3
我对VSCode/Intelephense几乎一无所知,但是类似问题的这个答案似乎暗示着(最近添加的)功能相当有bug。 - Jeto
谢谢!那里有很多有价值的信息!“Vendor”不能被禁用 - 这是一件事。但是,然后会发生很多无用的文件索引,由于性能问题,我想要抑制它们。仍然需要弄清楚我的存根应该长什么样子以及放置在哪里... - Robert Wildling
1
我建议将documentRoot设置为上一级,并排除所有不需要的目录,如node_modules,但仍保留vendor目录。否则,很多像ViewHelpers这样的东西就无法显示正确的信息。 - Georg Ringer
1个回答

3

即使我添加了适当的使用声明,仍然会出现这些警告。对我而言,我必须打开供应商文件夹中声明这些类型的文件,然后保存有问题的文件。这似乎会触发intelephense类型解析机制,从而消除警告。一旦intelephense识别它们,您可以安全地关闭供应商文件夹中的那些文件。我尝试关闭vs代码并重新打开它,仍然没有警告。您的情况可能会有所不同。


1
有趣的是,我使用了完全不同的编辑器,即 Panic 公司的 macOS 专属应用程序 Nova,采用了完全相同的方法。它也支持 LSP,而且还有一个可以很好地使用 Intelephense 的扩展程序。但是它表现出了同样的“问题”:你需要打开和保存相关文件才能让 Intelephense 认识到其中定义的符号。一旦我按照你所建议的那样做了,一切都运行得非常流畅 :-) 谢谢! - Gwyneth Llewelyn
1
顺便说一句,我认为@robert-wilding应该将您的答案标记为解决问题的答案 :-) - Gwyneth Llewelyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接