export function isInsideStringLiteral()

in client/src/embedded_support.ts [35:56]


export function isInsideStringLiteral(
    document: vscode.TextDocument, position: vscode.Position): boolean {
  if (document.languageId !== 'typescript') {
    return true;
  }
  const offset = document.offsetAt(position);
  const scanner = ts.createScanner(ts.ScriptTarget.ESNext, true /* skipTrivia */);
  scanner.setText(document.getText());

  let token: ts.SyntaxKind = scanner.scan();
  while (token !== ts.SyntaxKind.EndOfFileToken && scanner.getStartPos() < offset) {
    const isStringToken = token === ts.SyntaxKind.StringLiteral ||
        token === ts.SyntaxKind.NoSubstitutionTemplateLiteral;
    const isCursorInToken = scanner.getStartPos() <= offset &&
        scanner.getStartPos() + scanner.getTokenText().length >= offset;
    if (isCursorInToken && isStringToken) {
      return true;
    }
    token = scanner.scan();
  }
  return false;
}