我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# 对象/数据库对象。(那部分不重要,只知道我有一个特定的模型)
我也在使用默认的 ternecma5.json
和jquery.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
旁边有一个 [] 类型。所以我认为第一步是指定字符作为类型。
character.json
"character": {
"!type": "Character",
"!doc": "Represents the character model.",
"Coefficients":{
"!doc": "The coefficients that govern many of the calculative formulas"
}
}
发生了什么是以下屏幕。
现在我试图追查这一点,我发现了一个typeToIcon
在addons/tern.js
(不是实际的 tern 文件,插入 codemirror 的插件文件)中调用的函数
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;
}
所以我虽然AHA! This is it!!
,所以我想我可以在这里添加我的类型。
我添加console.log(type);
到函数中以查看输出是什么样的。虽然这从未触发,即使我点击CTRL+SPACE
,我也从未看到控制台输出,所以它告诉我没有到达此代码。我不得不走得更远。
我找到了一个名为TypeParser
in的函数def.js
,它是实际 tern 下载的一部分。
var TypeParser = exports.TypeParser = function (spec, start, base, forceNew) {
this.pos = start || 0;
this.spec = spec;
this.base = base;
this.forceNew = forceNew;
};
将控制台日志放在这里给了我一些结果,它们看起来像许多可用的类型,并且在jquery.json
和中定义ecma5.json
。
据我所知,我完全不知道如何进行。