UNPKG

alm

Version:

The best IDE for TypeScript

74 lines (73 loc) 3.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var events_1 = require("../../../common/events"); var socketClient_1 = require("../../../socket/socketClient"); var utils = require("../../../common/utils"); var state = require("../../state/state"); var commands = require("../../commands/commands"); require('./liveAnalysis.css'); var overrideClassName = 'monaco-live-analysis-override'; var overrideDecorationOptions = { glyphMarginClassName: overrideClassName, isWholeLine: true, hoverMessage: 'Overrides a base class member. Click to navigate.' }; function setup(cm) { // if (cm) return { dispose: () => null }; // DEBUG : while the feature isn't complete used to disable it var lastDecorations = []; var lastServerRes = null; // The key quick fix get logic var refreshLiveAnalysis = function () { // If not active project return if (!state.inActiveProjectFilePath(cm.filePath)) { if (lastDecorations.length) { lastDecorations = cm.deltaDecorations(lastDecorations, []); } return; } // query the server with live analysis socketClient_1.server.getLiveAnalysis({ filePath: cm.filePath, }).then(function (res) { lastServerRes = res; var newDecorations = res.overrides.map(function (override) { var result = { range: { startLineNumber: override.line + 1, endLineNumber: override.line + 1, }, options: overrideDecorationOptions }; return result; }); lastDecorations = cm.deltaDecorations(lastDecorations, newDecorations); }); }; var refreshLiveAnalysisDebounced = utils.debounce(refreshLiveAnalysis, 3000); var disposible = new events_1.CompositeDisposible(); disposible.add(cm.onDidFocusEditor(refreshLiveAnalysisDebounced)); disposible.add(cm.onDidChangeModelContent(refreshLiveAnalysisDebounced)); disposible.add(socketClient_1.cast.activeProjectConfigDetailsUpdated.on(function () { refreshLiveAnalysisDebounced(); })); /** * Also subscribe to the user clicking the margin */ disposible.add(cm.onMouseUp(function (mouseEvent) { if (mouseEvent.target.type === monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN && mouseEvent.target.element.className.includes(overrideClassName)) { var position_1 = mouseEvent.target.position; if (position_1 && lastServerRes) { var override = lastServerRes.overrides.find(function (x) { return x.line === (position_1.lineNumber - 1); }); if (override) { commands.doOpenOrFocusFile.emit({ filePath: override.overrides.location.filePath, position: override.overrides.location.position }); } } } })); return disposible; } exports.setup = setup;