3

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.jsondef ファイルも使用しています。それらはここにあります。

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"
    }
}

何が起こったかは次の画面です。

定義されたタイプとして文字を含む ctrl+space

これを追跡しようとしたところtypeToIconaddons/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んでした. もっと遡らなければなりませんでした。

実際のアジサシのダウンロードの一部であるTypeParserinと呼ばれる関数を探し出しました。def.js

  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

これは私が得た限りであり、どのように進めればよいかまったくわかりません。

4

2 に答える 2

1

スタイリングは、プリミティブ JS タイプのみを認識する CodeMirror Tern プラグインによって処理されます。JSON 定義ファイルを定義するときは、ランダムな文字列を型として使用するだけではいけません。JS 環境の実際の変数を参照する名前か、プリミティブ型 ( 、 など) を使用する必要がありstringますnumber

于 2014-04-02T12:50:01.090 に答える
0

あなたの問題はあまりにも具体的で、CodeMirror では提供できないため、常に解決策があります。あなたが提供したコードから私が理解したのは、言語モードで「ユーザー」、「エンティティ」、およびその他のカスタムデータタイプを識別できることです。例: (「javascript.js」) ローカル/グローバル変数リストにそれらのタイプを保存します.

そして、ヒントウィジェットを変更することで同様のインターフェイスを提供するようにヒント関数をカスタマイズします。

この機能を本当に実装したい場合は、私が提案したように独自のモジュールを実装して、完全に制御できるようにすることをお勧めします。

于 2014-04-03T14:00:09.860 に答える