diff --git a/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts b/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts index 552af4e55cd..b1931c90779 100644 --- a/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts +++ b/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts @@ -4,25 +4,24 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import strings = require('vs/base/common/strings'); +import * as strings from 'vs/base/common/strings'; import { IDisposable } from 'vs/base/common/lifecycle'; -import builder = require('vs/base/browser/builder'); -import dom = require('vs/base/browser/dom'); -import objects = require('vs/base/common/objects'); +import * as dom from 'vs/base/browser/dom'; +import * as objects from 'vs/base/common/objects'; export interface IHighlight { - start:number; - end:number; + start: number; + end: number; } export class HighlightedLabel implements IDisposable { - private domNode:HTMLElement; - private text:string; - private highlights:IHighlight[]; - private didEverRender:boolean; + private domNode: HTMLElement; + private text: string; + private highlights: IHighlight[]; + private didEverRender: boolean; - constructor(container:HTMLElement) { + constructor(container: HTMLElement) { this.domNode = document.createElement('span'); this.domNode.className = 'monaco-highlighted-label'; this.didEverRender = false; @@ -33,11 +32,15 @@ export class HighlightedLabel implements IDisposable { return this.domNode; } - set(text:string = '', highlights:IHighlight[] = []) { - if(this.didEverRender && this.text === text && objects.equals(this.highlights, text)) { + set(text: string = '', highlights?: IHighlight[]) { + if (this.didEverRender && this.text === text && objects.equals(this.highlights, highlights)) { return; } + if (!Array.isArray(highlights)) { + highlights = []; + } + this.text = text; this.highlights = highlights; this.render(); @@ -46,11 +49,11 @@ export class HighlightedLabel implements IDisposable { private render() { dom.clearNode(this.domNode); - var htmlContent:string[] = [], - highlight:IHighlight, + let htmlContent: string[] = [], + highlight: IHighlight, pos = 0; - for (var i = 0; i < this.highlights.length; i++) { + for (let i = 0; i < this.highlights.length; i++) { highlight = this.highlights[i]; if (highlight.end === highlight.start) { continue; diff --git a/src/vs/workbench/parts/quickopen/browser/markersHandler.ts b/src/vs/workbench/parts/quickopen/browser/markersHandler.ts index 450f9777e89..15ba61ee37c 100644 --- a/src/vs/workbench/parts/quickopen/browser/markersHandler.ts +++ b/src/vs/workbench/parts/quickopen/browser/markersHandler.ts @@ -9,7 +9,6 @@ import {TPromise} from 'vs/base/common/winjs.base'; import * as strings from 'vs/base/common/strings'; import * as network from 'vs/base/common/network'; import * as errors from 'vs/base/common/errors'; -import * as paths from 'vs/base/common/paths'; import * as dom from 'vs/base/browser/dom'; import * as nls from 'vs/nls'; import {ICommonCodeEditor, IEditorViewState} from 'vs/editor/common/editorCommon'; @@ -25,22 +24,45 @@ import {IMarkerService, IMarker} from 'vs/platform/markers/common/markers'; import {IWorkspaceContextService} from 'vs/platform/workspace/common/workspace'; import {IQuickOpenService} from 'vs/workbench/services/quickopen/common/quickOpenService'; import {ICodeEditorService} from 'vs/editor/common/services/codeEditorService'; +import {IFilter, or, matchesContiguousSubString, matchesPrefix} from 'vs/base/common/filters'; +import {HighlightedLabel} from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; class MarkerEntry extends QuickOpenEntryItem { - private _editorService: IWorkbenchEditorService; private _codeEditorService: ICodeEditorService; private _labelProvider: PathLabelProvider; - marker: IMarker; + private _marker: IMarker; + private _label: string; + private _description: string; constructor(editorService: IWorkbenchEditorService, codeEditorService: ICodeEditorService, contextService: IWorkspaceContextService, marker: IMarker) { super(); this._editorService = editorService; this._codeEditorService = codeEditorService; this._labelProvider = new PathLabelProvider(contextService); - this.marker = marker; + this._marker = marker; + + const {message, source, resource, startLineNumber, startColumn} = marker; + this._label = source ? nls.localize('marker.msg', '[{0}] {1}', source, message) : message; + this._description = nls.localize('marker.desc', '{0}({1},{2})', this._labelProvider.getLabel(resource.fsPath), startLineNumber, startColumn); + } + + private static _filter: IFilter = or(matchesPrefix, matchesContiguousSubString); + + public update(query: string): void { + + if (this._marker.resource.scheme === network.schemas.inMemory) { + // ignore inmemory-models + this.setHidden(true); + return; + } + + const labelHighlights = MarkerEntry._filter(query, this._label); + const descHighlights = MarkerEntry._filter(query, this._description); + this.setHighlights(labelHighlights, descHighlights); + this.setHidden(!labelHighlights && !descHighlights); } public getHeight(): number { @@ -49,30 +71,31 @@ class MarkerEntry extends QuickOpenEntryItem { public render(tree: ITree, container: HTMLElement, previousCleanupFn: IElementCallback): IElementCallback { dom.clearNode(container); - let elements: string[] = []; - let {severity, message, source, resource, startLineNumber, startColumn} = this.marker; - elements.push('