Богатый Intellisense для Lua - PullRequest
       27

Богатый Intellisense для Lua

0 голосов
/ 15 декабря 2018

Я использую Monaco Editor для моей программы на C #, и я хочу знать, как добавить rich intellisense для Lua.Например, если я что-то наберу, он попросит поставить это.

Ответы [ 3 ]

0 голосов
/ 12 января 2019

Можно рассмотреть возможность подключения языкового сервера Lua к Монако с помощью библиотеки monaco-languageclient TypeFox.Это все еще будет нелегко.

0 голосов
/ 19 июля 2019

В текущей версии 0.17.1 в возвращаемом объекте требуется дополнительное свойство range:

return {
   suggestions: [
   // Example: io.write ()
   {
       label: "io.write (string)",
       kind: monaco.languages.CompletionItemKind.Function,
       documentation: "Writes a string to stdout.",
       insertText: "io.write (\"\")",  // Escape JSON as needed.
       range: {
          startLineNumber: position.lineNumber,
          endLineNumber: position.lineNumber,
          startColumn: position.column,
          endColumn: position.column
       }
   },  // Other items.
   ]
}; 
0 голосов
/ 05 января 2019

Для начала я должен сказать, что это явно не просто и требует довольно больших усилий.По сути, вам придется самостоятельно анализировать код, а затем делать предложения на основе информации, которую вы собрали путем анализа.

Я не могу вдаваться в подробности о том, как вы можете или должны анализировать код, потому что этоэто огромная задача.Когда вы анализируете код, вы должны понимать, что к чему, и вы (вероятно) не можете сделать это с помощью простого регулярного выражения.Очень сложный пример - интеграция TypeScript , но есть и более простые примеры, например, HTML-плагин .Я могу только порекомендовать заглянуть туда для вдохновения.

Когда вы проанализировали код, вы в основном готовы идти.Затем вы можете угадать, что пользователь хочет сделать дальше, или, например, предложить методы или поля объекта, к которому он в данный момент обращается.

Затем вы можете предложить завершение, что делается путем передачи Монако JSON.объект закончен (на самом деле класс TypeScript, но об этом позже).На игровой площадке Monaco есть пример , который показывает, как это можно сделать.Минималистичный поставщик может выглядеть следующим образом:

monaco.languages.registerCompletionItemProvider ("lua", {    // Or any other language...
  provideCompletionItems: (model, position) => {
    // Retrieve the text until the current cursor's position, anything
    // after that doesn't really matter.
    var textToMatch = model.getValueInRange ({
      startLineNumber: 1,
      startColumn: 1,
      endLineNumber: position.lineNumber,
      endColumn: position.column
    });

    // Return JSON array containing all completion suggestions.
    return {
      suggestions: [
        // Example: io.write ()
        {
          label: "io.write (string)",
          kind: monaco.languages.CompletionItemKind.Function,
          documentation: "Writes a string to stdout.",
          insertText: "io.write (\"\")"  // Escape JSON as needed.
        },  // Other items.
      ]
    };
  }
});

Ознакомьтесь с документацией Монако по CompletionItemKind для различных типов элементов завершения и по CompletionItemProvider для«класс», который мы передаем как объект JSON registerCompletionItemProvider ().В документации по Монако есть все эти различные типы и классы, потому что Монако изначально написано на TypeScript , но эти классы и типы также могут быть похожи на обычный старый объект JSON.

Вы можете в принципе«создать» «богатого» поставщика IntelliSense, вызвав все различные register...Provider () функции , задокументированные здесь .

Если вы хотите действительно полезную IntelliSense, то я бы рекомендовал не забывать ометод registerSignatureHelpProvider (), который отображает окна «Peek Definition» при наведении мыши на тип, для которого доступно определение.

В любом случае, это действительно утомительная задача.И если вы посмотрите на файл, который отвечает за TypeScript IntelliSense (src/lib/typescriptServices.js в репозитории интеграции TypeScript), его размер составляет 6,51 МБ.Хотя он также содержит модуль форматирования и т. Д., Он дает вам хорошее представление о требуемой работе и о том, почему я не могу вдаваться в подробности о реализации IntelliSense прямо здесь.

...