function decorate()

in tools/vscode_query_breakdown/src/extension.ts [85:140]


function decorate(editor: vscode.TextEditor) {
  const decorationUnparseableArray: vscode.DecorationOptions[] = [];
  const decorationParseableArray: vscode.DecorationOptions[] = [];

  // parses through the json objects
  for (let i = 0; i < json.length - 2; i++) {
    // finds error position
    const errorRange = new vscode.Range(
      json[i].error_position.startLine - 1,
      json[i].error_position.startColumn - 1,
      json[i].error_position.endLine - 1,
      json[i].error_position.endColumn
    );
    // deletion case
    if (json[i].error_type === 'DELETION') {
      const deletionMessage = new vscode.MarkdownString('Deleted');
      decorationUnparseableArray.push({
        range: errorRange,
        hoverMessage: deletionMessage,
      });
    }
    // replacement case
    else if (json[i].error_type === 'REPLACEMENT') {
      const replacementMessage = new vscode.MarkdownString(
        'Replaced ' + json[i].replacedFrom + ' with ' + json[i].replacedTo
      );
      decorationUnparseableArray.push({
        range: errorRange,
        hoverMessage: replacementMessage,
      });
    } else {
      // error handling
      continue;
    }
  }

  // constructs decoration option for entire document
  const entireDocument = new vscode.Range(
    editor.document.lineAt(0).range.start,
    editor.document.lineAt(editor.document.lineCount - 1).range.end
  );
  decorationParseableArray.push({range: entireDocument});

  // sets the decorations
  editor.setDecorations(decorationTypeParseable, decorationParseableArray);
  editor.setDecorations(decorationTypeUnparseable, decorationUnparseableArray);

  vscode.window.showInformationMessage(
    'Percentage of Parseable Components: ' +
      json[json.length - 2].performance +
      '%'
  );
  vscode.window.showInformationMessage(
    'Runtime: ' + json[json.length - 1].runtime + ' seconds'
  );
}