src/Tools/VSCode/extension/src/decorations.ts
author wenzelm
Fri, 03 Mar 2017 23:04:12 +0100
changeset 65097 ed2e33653438
parent 65095 eb21a4f70b0e
child 65098 b47ba1778e44
permissions -rw-r--r--
more robust Uri comparison, notably on Windows;

'use strict';

import * as vscode from 'vscode'
import { Range, MarkedString, DecorationOptions, DecorationRenderOptions,
  TextEditorDecorationType, ExtensionContext, Uri } from 'vscode'


/* known decoration types */

export interface Decorations
{
  bad: TextEditorDecorationType
}

export let types: Readonly<Decorations>

export function init(context: ExtensionContext)
{
  function decoration(options: DecorationRenderOptions): TextEditorDecorationType
  {
    const typ = vscode.window.createTextEditorDecorationType(options)
    context.subscriptions.push(typ)
    return typ
  }

  if (!types)
    types =
    {
      bad: decoration({ backgroundColor: 'rgba(255, 106, 106, 0.4)' })
    }
}


/* decoration for document node */

export interface Decoration
{
  uri: string,
  "type": string,
  content: DecorationOptions[]
}

export function apply(decoration: Decoration)
{
  let typ = types[decoration.type]
  if (typ) {
    let uri = Uri.parse(decoration.uri).toString()
    let editor =
      vscode.window.visibleTextEditors.find(
        function (editor) { return uri == editor.document.uri.toString() })
    if (editor) editor.setDecorations(typ, decoration.content)
  }
}