gpt4 book ai didi

javascript - 带有 Tern 的 CodeMirror - 带有 Javascript Intellisense 的自定义 "Types"

转载 作者:行者123 更新时间:2023-11-29 15:39:07 30 4
gpt4 key购买 nike

我正在使用 tern 为使用 CodeMirror 运行的窗口提供一些增强的智能感知,它工作正常,但我遇到了一个问题,我想添加一些自定义“types”,可以这么说,这样下拉列表中它们旁边就有图标了。我已经缩小了代码范围......

.json 定义文件中,类型似乎是使用 !type 指令声明的,如下所示;

  "Infinity": {
"!type": "number",
"!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Infinity",
"!doc": "A numeric value representing infinity."
},
"undefined": {
"!type": "?",
"!url": "https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/undefined",
"!doc": "The value undefined."
}

这些与 CSS 有点对应,像这样。

.CodeMirror-Tern-completion-object:before {
content: "O";
background: #77c;
}
.CodeMirror-Tern-completion-fn:before {
content: "F";
background: #7c7;
}
.CodeMirror-Tern-completion-array:before {
content: "A";
background: #c66;
}
.CodeMirror-Tern-completion-number:before {
content: "1";
background: #999;
}

好的,这一切都很好。我可以设计那些,没问题。但是我想添加一些我自己的,并且很难做到这一点。例如,如果我只是做...

  "Character": {
"!type": "entity",
"!url": "some-url",
"!doc": "This is a character entity."
},
"User": {
"!type": "user",
"!url": "some-url-again",
"!doc": "This is a user entity."
}

它只是导致整个事情无法正常工作;就像 tern 只是说 nope nope nope 而什么都不做。我已经尝试了几个小时,并且真正地挖掘了源代码,但无法真正找到一种方法来构建我自己的类型。我想简单地给这个特定代码编辑器的用户(它不会“完全”是 javascript,它会是 javascript,但是有一些简化的文字,因为他们不是编码员)一些简单的标志来让它更容易在他们身上。

欢迎提出任何建议!感谢您的宝贵时间。

更新

应用户要求,我将发布更多代码以尝试获得更多帮助。这就是我要的;我有一个定义对象布局的 .json 文件。该对象将镜像一个实际的 C# 对象/数据库对象。 (那部分不重要,只要知道我有具体型号就行)

我还使用默认的 tern ecma5.jsonjquery.json def 文件。它们在这里被发现;

https://github.com/marijnh/tern/blob/master/defs/ecma5.json https://github.com/marijnh/tern/blob/master/defs/jquery.json

因此,当用户按下 CTRL+SPACE 并看到 CHARACTER 时,我希望它旁边有一个 [CHARACTER] 类型.所以我认为第一步是将字符指定为类型。

字符.json

"character": {
"!type": "Character",
"!doc": "Represents the character model.",
"Coefficients":{
"!doc": "The coefficients that govern many of the calculative formulas"
}
}

发生的是以下屏幕。

ctrl+space with character as defined type

现在我试图追查这个,我在 addons/tern.js 中发现了一个名为 typeToIcon 的函数(不是实际的 tern 文件,插件文件插入进入代码镜像)

function typeToIcon(type) {
var suffix;

if (type == "?") suffix = "unknown";
else if (
type == "number" ||
type == "string" ||
type == "bool"
) suffix = type;

else if (/^fn\(/.test(type)) suffix = "fn";
else if (/^\[/.test(type)) suffix = "array";
else suffix = "object";

return cls + "completion " + cls + "completion-" + suffix;
}

所以我虽然啊哈!就是这样!!,所以我想我可以在这里添加我的类型。

我将 console.log(type); 添加到函数中以查看输出结果。虽然这从未触发过,即使当我按下 CTRL+SPACE 时,我也从未看到控制台输出,所以它告诉我未达到此代码。我不得不回到更远的地方。

我在 def.js 中找到了一个名为 TypeParser 的函数,这是实际 tern 下载的一部分。

  var TypeParser = exports.TypeParser = function (spec, start, base, forceNew) {
this.pos = start || 0;
this.spec = spec;
this.base = base;
this.forceNew = forceNew;
};

将控制台日志放在这里给了我一些结果,它们看起来像许多可用的类型,并且在 jquery.jsonecma5.json 中定义>.

就我所知,我完全不知道如何继续。

最佳答案

样式由 CodeMirror Tern 插件处理,它只识别原始 JS 类型。在定义 JSON 定义文件时,您不能只使用随机字符串作为类型——您必须使用引用 JS 环境中的实际变量的名称,或者原始类型(string编号等)。

关于javascript - 带有 Tern 的 CodeMirror - 带有 Javascript Intellisense 的自定义 "Types",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22743102/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com