Intellij 完成贡献者

2024-02-28

我正在为 intellij 开发一个插件,我想向基于 xsd 的 xml 编辑器添加自定义建议。到目前为止,我可以从 xsd 文件中获取所需的建议。

我已经实现了 xml 的完成贡献者,如下所示

import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.xml.XmlElementType;
import com.intellij.util.ProcessingContext;
import com.intellij.lang.xml.*;
import org.jetbrains.annotations.NotNull;


public class SimpleCompletionContributor extends CompletionContributor {
    public SimpleCompletionContributor() {
        extend(CompletionType.BASIC,PlatformPatterns.psiElement(XmlElementType.XML_ATTRIBUTE_VALUE).withLanguage(XMLLanguage.INSTANCE),
            new CompletionProvider<CompletionParameters>() {
                public void addCompletions(@NotNull CompletionParameters parameters,
                                           ProcessingContext context,
                                           @NotNull CompletionResultSet resultSet) {
                    resultSet.addElement(LookupElementBuilder.create("Hello"));
                }
            }
        );
    }
}

但这并没有提供任何建议。但是当我实现自定义语言时它就起作用了。我的目标是查看光标位置的上下文并根据它提供建议。例如,当用户在 xml 文件上启动标签时,插件应提供属性作为代码完成。我是这种自定义语言的新手。

那么有人可以帮助我完成这个贡献者吗?


终于我找到了解决这个问题的方法

这是我的代码

import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;

public class ScalaXMLCompletionContributor extends CompletionContributor {

public ScalaXMLCompletionContributor() {
    final RelativeNodes rlt = new RelativeNodes();//this is a class to get siblings and children from a sample xml file generated by a given xsd

    /*if the parameter position is an xml attribute provide attributes using given xsd*/
    extend(CompletionType.BASIC,
            PlatformPatterns.psiElement(), new CompletionProvider<CompletionParameters>() {
                public void addCompletions(@NotNull CompletionParameters parameters,//completion parameters contain details of the curser position
                                           ProcessingContext context,
                                           @NotNull CompletionResultSet resultSet) {//result set contains completion details to suggest
                    if (parameters.getPosition().getContext().toString() == "XmlAttribute") {//check whether scala text editors position is an xml attribute position eg: <name |
                        try {
                            String[] suggestions = rlt.getAttribute(parameters.getPosition().getParent().getParent().getFirstChild().getNextSibling().getText().replaceFirst("IntellijIdeaRulezzz", ""));//extract text from completion parameter and get required suggestions from RelativeNodes

                            int i = 0;
                            do {
                                resultSet.addElement(LookupElementBuilder.create(suggestions[i]));//add suggestions to resultset to suggest in  editor
                                i++;

                            } while (suggestions[i] != null);


                        } catch (NullPointerException e) {
                        }
                    }

                }
            }
    );
    }
    }

在这种情况下,我们可以通过完成参数获取光标位置和与光标位置相关的标记,并且我们可以使用 cmplpletion 结果集注入建议。这也可以用scala语言实现。

在插件 xml 中注册完成贡献者

 <extensions defaultExtensionNs="com.intellij">
 <completion.contributor language="Scala"    implementationClass="com.hsr.ScalaXMLCompletionContributor"/>
 </extensions>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Intellij 完成贡献者 的相关文章

随机推荐

  • 处理 float() 函数

    首先 是这个功能 https processing org reference floatconvert html特殊处理还是默认存在于java中 当我在处理下面的行时编码时 println float 88 t float 88 n t
  • 如何正确地为 Office COM 加载项实现 IDTEXtensibility2 接口?

    我正在为 Outlook 实施 COM 加载项 我使用 IDTEXtensibility2 我不确定这是否是执行 COM 加载项的最佳方式 但我无法更改它 该接口定义了五个方法 OnConnection OnStartupComplete
  • Ember CLI:自定义输入助手

    我正在尝试使用 UrlField 扩展 Ember 的 TextField 以便如果有人忘记包含http 它为他们做到了 这是我的观点 视图 input url js import Ember from ember export defau
  • 模块对象没有属性“DescriptorExtractor_create()”

    我安装了 opencv3 1 0 并正确安装了 opencv contrib 但收到错误 no module DescriptorExtractor create 一切都很好 建议 在 OpenCV 3 x 中 SIFT 和 SURF 已被
  • 如何使用 XChart 使 Y 轴上的限制相同?

    我正在尝试绘制一系列相似的函数 域是 0 1 范围总是在 3 3 中 我希望每个图表的 Y 轴限制都相同 尝试设置系列 y min 和 y max 似乎不起作用 有没有办法使每个图表上的 Y 轴限制相同 import java math B
  • 使用 SMO 库从 C# 中的应用程序运行 .sql 文件

    我正在 C Visual Studio 2012 RC 中构建一个应用程序 我必须在应用程序中运行脚本 为此我正在使用 这两个库 我的应用程序的目标 net 框架是 4 5 using Microsoft SqlServer Managem
  • 溢出-x:可见;溢出-y:自动;不起作用 - 这个标准符合吗? [复制]

    这个问题在这里已经有答案了 我在开发网页时遇到问题 Firefox 或 Internet Explorer 都不会呈现我期望的以下代码片段的行为 div style width 200px height 200px border 1px s
  • 是否可以让空的 RequestParam 值使用 defaultValue?

    如果我有一个类似于以下内容的请求映射 RequestMapping value test method RequestMethod POST ResponseBody public void test RequestParam value
  • Java 中的无符号短整型

    我怎样才能声明unsigned shortJava 中的值 你不能 真的 Java 没有任何无符号数据类型 除了char 诚然你could use char 这是一个 16 位无符号类型 但在我看来这将是可怕的 因为char显然适用于文本
  • Python QuTiP 中的集成未成功

    我一直在尝试使用 QuTiP 来求解量子力学矩阵微分方程 Lindblad 方程 这是代码 from qutip import from matplotlib import import numpy as np hamiltonian np
  • 用其他语言编写 JavaScript

    我有一些不会说英语的客户 他们希望我用另一种语言为他们编写 JavaScript 浏览器可以理解其他语言吗 还是我仅限于非英语注释 navigateur nomApp indice Microsoft 代替 navigator appNam
  • 当没有按钮时,如何防止 fetch 请求重新加载 Javascript 页面?

    首先我要说的是 有无数的线程描述了涉及按钮的问题 通常 只需对传入的事件调用 event preventDefault 即可解决该问题 但是 如果在发生超出用户控制范围的事件 例如 经过一定量的帧后 后调用 post 请求 该怎么办 mak
  • 在 pandas/matplotlib 中获取散点图的 Colorbar 实例

    如何获取 pandas DataFrame plot 创建的绘图的内部创建的颜色条实例 以下是生成彩色散点图的示例 import matplotlib pyplot as plt import pandas as pd import num
  • 尺寸改变时宽度不改变

    我已经这样做很多年了 但现在它不起作用了 private void Form1 Deactivate object sender EventArgs e this Size new Size 30 29 txt Visible false
  • 有基础活动课程好吗?

    拥有好不好BaseActivity类 它将作为所有其他活动的超级类 我需要这个来为活动提供一些通用的实现 基础活动 public class BaseActivity extends Activity All Common implemen
  • 在 C# 中移动 Form2 时移动 Form1

    我有两种形式 Form2正在被打开Form1 像这样 Form2 ShowDialog StartPosition of Form2配置为centerParent 我需要固定位置Form2在 Form1 的中心 这样当我移动时Form2 F
  • 如何为 SSL 握手配置 CFStream(或 NSStream)?

    我正在使用 CFStream NSStream 建立 http 连接 我希望能够检测到 SSL 握手在三种情况下失败 情况A 服务器不可信 情况 B 服务器受信任 但要求提供客户端证书 情况 C 服务器不受信任 它要求客户端证书 今天 我没
  • Yeoman 无法识别全球安装的发电机

    I ran sudo npm install g generator flask它被保存了 我能够通过运行来确认npm list g 然后我跑yo flask 我以为这会起作用 但收到一条错误消息 Error flask You don t
  • Oracle在Java中的RETURNING INTO用法(JDBC、Prepared Statement)

    我正在使用 JDBC 执行 Oracle 语句 如下所示 INSERT INTO MYTABLE MYDATA VALUES RETURNING MY CALCULATED DATA INTO MYTABLE s def makes MY
  • Intellij 完成贡献者

    我正在为 intellij 开发一个插件 我想向基于 xsd 的 xml 编辑器添加自定义建议 到目前为止 我可以从 xsd 文件中获取所需的建议 我已经实现了 xml 的完成贡献者 如下所示 import com intellij cod