alm
Version:
The best IDE for TypeScript
144 lines (143 loc) • 4.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var editorOperationCounter = 0;
function replaceSelection(config) {
var selection = config.editor.getSelection();
var editOperation = {
identifier: {
major: 0,
minor: ++editorOperationCounter,
},
text: config.newText,
range: selection,
forceMoveMarkers: false,
};
config.editor.getModel().pushEditOperations([], [editOperation], null);
}
exports.replaceSelection = replaceSelection;
function replaceRange(config) {
var editOperation = {
identifier: {
major: 0,
minor: ++editorOperationCounter,
},
text: config.newText,
range: new monaco.Range(config.range.startLineNumber, config.range.startColumn, config.range.endLineNumber, config.range.endColumn),
forceMoveMarkers: false,
isAutoWhitespaceEdit: false,
};
config.model.pushEditOperations([], [editOperation], null);
}
exports.replaceRange = replaceRange;
function writeString(config) {
var editOperation = {
identifier: {
major: 0,
minor: ++editorOperationCounter,
},
text: config.str,
range: new monaco.Range(config.pos.lineNumber, config.pos.column, config.pos.lineNumber, config.pos.column),
/** Needed to change selection */
forceMoveMarkers: true,
};
config.model.pushEditOperations([], [editOperation], null);
}
exports.writeString = writeString;
/** Runs format or format selection (if any) */
function format(config) {
var action = config.editor.getAction('editor.action.format');
action.run();
}
exports.format = format;
/**
* Useful for language query stuff that we want to debounce + cancel if no longer relevant even after the query is made
*/
function onlyLastCallWithDelay(call, token) {
var delay = 500;
var timeout;
var p = new Promise(function (resolve, reject) {
var later = function () {
if (token.isCancellationRequested)
reject('cancelled');
else {
call().then(function (res) {
if (token.isCancellationRequested)
reject('cancelled');
else
resolve(res);
});
}
};
timeout = setTimeout(later, delay);
token.onCancellationRequested(function () {
clearTimeout(timeout);
reject('cancelled');
});
});
return p;
}
exports.onlyLastCallWithDelay = onlyLastCallWithDelay;
function setSelection(cfg) {
var model = cfg.editor.getModel();
var start = model.getPositionAt(cfg.textSpan.start);
var end = model.getPositionAt(cfg.textSpan.start + cfg.textSpan.length);
cfg.editor.setSelection({
startLineNumber: start.lineNumber,
startColumn: start.column,
endLineNumber: end.lineNumber,
endColumn: end.column
});
}
exports.setSelection = setSelection;
function gotoPosition(cfg) {
var pos = {
lineNumber: cfg.position.line + 1,
column: cfg.position.ch + 1,
};
cfg.editor.setPosition(pos);
cfg.editor.revealPosition(pos);
}
exports.gotoPosition = gotoPosition;
function getVisibleLines(editor) {
// HACK: The current lines visible api
var range = editor._view.layoutProvider.getLinesViewportData().visibleRange;
return range;
}
exports.getVisibleLines = getVisibleLines;
/** Note: Only useful if in single cursor mode */
function isCursorInTopHalf(cm) {
var cursor = cm.getPosition();
var scrollInfo = getVisibleLines(cm);
// Closer to top than bottom
return (cursor.lineNumber - scrollInfo.startLineNumber) < (scrollInfo.endLineNumber - cursor.lineNumber);
}
exports.isCursorInTopHalf = isCursorInTopHalf;
function getSelectionOrCurrentLine(editor) {
var selection = editor.getSelection();
var hasSelection = !selection.isEmpty();
if (hasSelection) {
var selected = editor.getModel().getValueInRange(selection);
return selected;
}
else {
var selected = editor.getModel().getLineContent(selection.startLineNumber);
return selected;
}
}
exports.getSelectionOrCurrentLine = getSelectionOrCurrentLine;
/**
* Position conversion functions
*/
function getCurrentPosition(editor) {
var position = editor.getPosition();
return editor.getModel().getOffsetAt(position);
}
exports.getCurrentPosition = getCurrentPosition;
function positionToOffset(model, position) {
return model.getOffsetAt(position);
}
exports.positionToOffset = positionToOffset;
function offsetToPosition(model, offset) {
return model.getPositionAt(offset);
}
exports.offsetToPosition = offsetToPosition;