Uploaded image for project: 'Runtime'
  1. Runtime
  2. RUNTIME-4282

Handle namespace autocompletion in typescript editor

XMLWordPrintable

    • Icon: Improvement Improvement
    • Resolution: Fixed
    • Icon: Major Major
    • 4.10.0
    • None
    • None
    • None
    • 4.10 M3
    • Oui

      monaco.languages.registerCompletionItemProvider('typescript', {
                                      //triggerCharacters: ['.'],
                                      provideCompletionItems: (model, position, context) => {
                                          let suggestions = [];
                                          const wordUntilPosition = model.getWordUntilPosition(position);
                                          // calculate range to pass to suggestions
                                          const range = {
                                            startLineNumber: position.lineNumber,
                                            startColumn: wordUntilPosition.startColumn,
                                            endLineNumber: position.lineNumber,
                                            endColumn: wordUntilPosition.endColumn
                                          };
                                          
                                          const wordAtPosition = model.getWordAtPosition({ lineNumber: position.lineNumber, column: Math.max(position.column, 0) });
                                          // if word at position before the dot is namespace you want to support
                                          // in my case it was word tags
                                          if (wordAtPosition.word.length > 0 && wordAtPosition.word.charAt(0) == wordAtPosition.word.charAt(0).toUpperCase()) 
                                          {
                                            // namespace autocomplete suggestions for "tags."
                                            suggestions.push({
                                                  label: "Content (org.ametys.cms.repository.Content)",
                                                  kind: monaco.languages.CompletionItemKind.Class,
                                                  insertText: "org.ametys.cms.repository.Content"
                                            });
                                          }
                                          else {
                                            // otherwise I generate another list of suggestions e.g. to show autocompletions for keywords or add custom snippets support
                                          }
                                          return { suggestions };
                                      }
                                  });
      

            raphael Raphaël Franchet
            raphael Raphaël Franchet
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: