completeText()

in src/view/completion-view.js [50:78]


  completeText(mirror, text) {
    let cur = mirror.getCursor();
    let token = mirror.getTokenAt(cur);
    let from = {line: cur.line, ch: token.start};
    let to = {line: cur.line, ch: token.end};
    const currentSymbol = token.string.trim();
    if ([".", "", "(", ":"].includes(currentSymbol)) {
      mirror.replaceRange(text, to)
    } else {
      /*
      Replace string with $ in string in case=>
      val world = "world"
      println("Hello $world)

      Plain string => cursorInStringIndex = -1
      completionText will be equals result.text
       */
      let cursorInStringIndex = cur.ch - token.start;
      let sentence$index = currentSymbol.substring(0, cursorInStringIndex).lastIndexOf('$');
      let firstSentence = currentSymbol.substring(0, sentence$index + 1);
      let completionText = firstSentence + text + currentSymbol.substring(cursorInStringIndex, token.string.length);
      mirror.replaceRange(completionText, from, to);
      mirror.setCursor(cur.line, token.start + sentence$index + this.completion.text.length + 1);
      if (completionText.endsWith('(')) {
        mirror.replaceRange(")", {line: cur.line, ch: token.start + this.completion.text.length});
        mirror.execCommand("goCharLeft");
      }
    }
  }