Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带Tern的CodeMirror-定制“;“类型”;使用Javascript Intellisense_Javascript_Codemirror_Tern - Fatal编程技术网

带Tern的CodeMirror-定制“;“类型”;使用Javascript Intellisense

带Tern的CodeMirror-定制“;“类型”;使用Javascript Intellisense,javascript,codemirror,tern,Javascript,Codemirror,Tern,我正在使用tern为运行codemirr的窗口提供一些增强的智能感知,它工作得很好,但我遇到了一个问题,我想添加一些自定义的“类型”,这样在下拉列表中它们旁边就可以有图标。我把代码缩小了一点 在.json定义文件中,类型似乎是使用声明的!键入指令,如下所示 "Infinity": { "!type": "number", "!url": "https://developer.mozill

我正在使用
tern
为运行
codemirr
的窗口提供一些增强的智能感知,它工作得很好,但我遇到了一个问题,我想添加一些自定义的“
类型
”,这样在下拉列表中它们旁边就可以有图标。我把代码缩小了一点

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

  "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.json
jquery.json
def文件。它们在这里被发现

因此,当用户点击
CTRL+SPACE
并看到
CHARACTER
时,我希望它旁边有一种[
CHARACTER
]类型。所以我认为第一步是指定character作为类型

character.json
下面的屏幕显示了发生的情况

现在我试图找到这个,我在
addons/tern.js
中发现了一个名为
typeToIcon
的函数(不是实际的tern文件,是插入codemirror的插件文件)

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

我添加了
console.log(类型)到函数,查看输出是什么样的。但这从未触发过,即使在我点击
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.json
ecma5.json
中定义的


就我所知,我完全不知道如何进行。

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

因为您的问题太具体,CodeMirror无法提供,所以总有出路。 从您提供的代码中我了解到,您可以在语言模式下识别“user”、“entity”和其他自定义数据类型,例如:((“javascript.js”),并将它们的类型存储在本地/全局变量列表中

然后通过更改提示小部件定制提示功能,以提供类似的界面


如果你真的想实现这个功能,你最好像我建议的那样实现自己的模块,这样你就可以完全控制了。

没有办法附加这个并让它相信还有其他原始类型?我知道这看起来很荒谬,请理解我不想实际创建新类型。我正在为一个需要一些轻量级脚本的网站制作这个“编辑器”,而使用它的工作人员不知道如何编程。他们不是那种人。我正在使用我所能使用的每一种工具,使脚本“界面”对他们尽可能友好,这样他们就不会那么困惑了。能够给诸如
[字符]
[动作]
等事物贴上标签,将大大减轻他们所承受的压力。他们看到“对象”“功能”等,只是感到困惑。有时候我可以指导他们,但用户始终是最终产品中最重要的部分。这也是我采取的方法,我认为这会奏效。但是在这个过程中的某个时刻,试图偏离javascrpt原语只会导致
tern
系统完全无法运行。我甚至不能得到一条错误消息,一个控制台输出,任何东西。那么你一定是在某个地方破坏了流程,你应该调试那个部分。我觉得这将是最好的方法,如果您提供一些您尝试过的代码,我们将非常乐意帮助您。我非常感激。我真的很想得到一些帮助。这让我沮丧得流下了眼泪。我将尝试在一个小时左右提供更多的代码。我将在前言中说明我对
tern
的了解为0。我知道我从源代码中获得了什么,JavaScript已经是我最薄弱的语言了。请稍等,我看看我能展示什么,可以展示更多。什么样的代码对你有帮助?嘿@djadmin,我已经添加了更多我可以添加的代码。如果没有用,我很抱歉。我不知道我在做什么。我无法理解您的方法,但据我所知,您应该根据需要修改emacs.json文件,然后尝试用您的方法加载修改后的json
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;
}
  var TypeParser = exports.TypeParser = function (spec, start, base, forceNew) {
    this.pos = start || 0;
    this.spec = spec;
    this.base = base;
    this.forceNew = forceNew;
  };