alm
Version:
The best IDE for TypeScript
74 lines (73 loc) • 3.12 kB
JavaScript
;
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;