问题标签 [intellij-platform-psi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
107 浏览

kotlin - 从 Kotlin PSI 获取注解参数(或注解实例)

我有一个 Kotlin 注释:

它可以通过两种方式在 Kotlin 类上使用:使用命名参数语法,或使用位置参数语法:

我在我的自定义检测规则中使用此注释进行一些额外的检查。我需要提取type参数的值以基于它执行一些检查。我这样做:

但是此代码仅适用于“命名”参数语法,并且对于位置参数无效。无论使用什么语法,有什么方法可以获取注释参数的值?如果我可以直接从 PSI / AST / s获取我的Type注释实例并像往常一样使用它,那将是完美的。KtElement是否可以从 PSI 树实例化注释?

0 投票
1 回答
177 浏览

kotlin - IntelliJ / Kotlin PSI中的注释与注释条目

我有一个 Kotlin 注释:

它可以用于 Kotlin 类:

我正在使用detekt分析此源代码,它提供对Kotlin PSI的访问。要获得注释,我使用如下代码:

其中,klass有一种KtClass来自 Kotlin PSI 的类型。我注意到,它KtClass有两个属性:annotations并且annotationEntries对于annotations上面的带注释的类是空的。

annotations我应该使用什么以及annotationEntries何时应该使用什么之间有什么区别?

0 投票
1 回答
364 浏览

kotlin - 如何在 Kotlin PSI 中获得类的完全限定域名?

我有一个 Kotlin 数据类:

我正在用detekt分析它,它提供了对Kotlin PSI的访问。

我正在尝试获取我班级的 FQDN:

其中,klass有一种KtClass来自 Kotlin PSI 的类型。但是该代码只打印了我的班级的一个简短名称,例如Example,而我想得到a.b.c.Example.

如何在 Kotlin PSI 中获得类的完全限定域名?

0 投票
1 回答
59 浏览

flutter - 如何使用 intellij Dart 插件在 dart 中创建新语句

在java中,我们可以创建一个像上面这样的语句。我克隆了颤振插件,我正在添加一个新的意图(alt + enter)函数,但我不知道如何在 dart 中创建新语句。

0 投票
1 回答
314 浏览

intellij-plugin - 如何从 PsiElement 或 VirtualFile 获取 KtClass?

我想制作一个插件,为某些特定的 kotlin 文件生成一些模板代码。现在我需要从 PsiElement 或 VirtualFile 获取 KtClass。我尝试了一些如下代码,但它不起作用。

PS:我发现有2个PsiTreeUtils,一个 from org.jetbrains.kotlin.com.intellij.psi.utilpackage ,一个 from com.intellij.psi.util,不知道用哪个

0 投票
1 回答
125 浏览

kotlin - Intellij 插件:由 PsiFile.findElementAt() 返回的元素提供很少的语言/语法信息

我正在尝试创建一个 Intellij 插件,它与我最近创建的 VSCode 扩展Ligatures Limited执行相同的操作,该插件旨在防止来自 Fira Code 等字体的字体编码连字脱离上下文呈现,以便它们工作对于诸如运算符和标点符号之类的东西,但不要出现在注释和字符串中。

我尝试遵循此示例中的代码:https ://github.com/JetBrains/intellij-sdk-docs/tree/master/code_samples/psi_demo

...但是当我创建看起来像这样的代码时

...对于三种不同的文件类型,我发现只有 JSON 文件(JSON、JavaScript 和 TypeScript 文件)被语言识别,并且在我的扩展允许看到的范围内被标记化。语法着色和其他特定于语言的支持显然在某种程度上起作用,但不是我的扩展程序似乎能够访问的方式。

psiFile.language适用JSON于 JSON,但仅TEXT适用于 JavaScript 和textmateTypeScript。

我可以看到 JSON 的所有不同标记类型(JsonObject、JsonStringLiteral、JsonProperty 等),但 JavaScript 文件作为一个大的 TEXT 标记返回,其中包含 JavaScript 文件的所有文本,TypeScript 只产生PsiElement(empty token)

这是我当前的plugin.xml文件:

我有点担心我可能需要为我想要解析的每种语言显式添加依赖项。但是话又说回来,添加<depends optional="true">JavaScript</depends>并没有帮助我进一步解析 JavaScript,所以也许这无论如何也无济于事。

这可能是一个时间问题,就像我highlightVisitor在文件被解析之前收到回调一样?

0 投票
0 回答
6 浏览

intellij-idea - 完全创建和构建新项目时的 Intellij 平台插件侦听器

我是 Intellij 平台插件开发的新手。所需的情况是,当新项目成功创建和构建时(在创建所有必需的源之后),我想要一个监听器。我尝试了以下几种:

  • 项目经理监听器
  • PostStartUpActivity
  • 编译任务

这些都不起作用。项目一打开,即在构建完成和文件创建之前,就会调用前两个监听器。但是在构建完成后我需要一个监听器,以便我可以访问所有源文件夹和文件。这种情况有什么解决方法吗?