未验证 提交 6d439732 编写于 作者: A Alex Dima

Reduce diff

上级 2a499549
......@@ -374,24 +374,43 @@ export class WordOperations {
return null;
}
protected static _determineDeleteRange(wordSeparators: WordCharacterClassifier, model: ICursorSimpleModel, wordNavigationType: WordNavigationType, position: Position, isEntire: boolean): Range {
public static deleteWordLeft(ctx: DeleteWordContext, wordNavigationType: WordNavigationType): Range | null {
const wordSeparators = ctx.wordSeparators;
const model = ctx.model;
const selection = ctx.selection;
const whitespaceHeuristics = ctx.whitespaceHeuristics;
if (!selection.isEmpty()) {
return selection;
}
if (DeleteOperations.isAutoClosingPairDelete(ctx.autoClosingBrackets, ctx.autoClosingQuotes, ctx.autoClosingPairs.autoClosingPairsOpenByEnd, ctx.model, [ctx.selection])) {
const position = ctx.selection.getPosition();
return new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column + 1);
}
const position = new Position(selection.positionLineNumber, selection.positionColumn);
let lineNumber = position.lineNumber;
let column = position.column;
let columnEnd = position.column;
let lineContent = model.getLineContent(position.lineNumber);
if (lineNumber === 1 && column === 1) {
// Ignore deleting at beginning of file
return null;
}
if (whitespaceHeuristics) {
let r = this._deleteWordLeftWhitespace(model, position);
if (r) {
return r;
}
}
let prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);
if (wordNavigationType === WordNavigationType.WordStart) {
if (prevWordOnLine) {
column = prevWordOnLine.start + 1;
if (isEntire) {
columnEnd = prevWordOnLine.end + 1;
const chCode = lineContent.charCodeAt(columnEnd - 1);
if (chCode === CharCode.Space || chCode === CharCode.Tab) {
columnEnd++;
}
}
} else {
if (column > 1) {
column = 1;
......@@ -416,11 +435,10 @@ export class WordOperations {
}
}
return new Range(lineNumber, column, position.lineNumber, columnEnd);
return new Range(lineNumber, column, position.lineNumber, position.column);
}
public static deleteWordLeft(ctx: DeleteWordContext, wordNavigationType: WordNavigationType): Range | null {
public static deleteWordEntire(ctx: DeleteWordContext, wordNavigationType: WordNavigationType): Range | null {
const wordSeparators = ctx.wordSeparators;
const model = ctx.model;
const selection = ctx.selection;
......@@ -446,17 +464,16 @@ export class WordOperations {
}
if (whitespaceHeuristics) {
let r = this._deleteWordLeftWhitespace(model, position);
let r = this._deleteWordEntireWhitespace(model, position);
if (r) {
return r;
}
}
return this._determineDeleteRange(wordSeparators, model, wordNavigationType, position, false);
return this._determineDeleteRange(wordSeparators, model, wordNavigationType, position, true);
}
protected static _deleteWordEntireWhitespace(model: ICursorSimpleModel, position: Position): Range | null {
private static _deleteWordEntireWhitespace(model: ICursorSimpleModel, position: Position): Range | null {
const lineContent = model.getLineContent(position.lineNumber);
const startIndex1 = position.column - 1; // deleteRight
const startIndex2 = position.column - 2; // deleteLeft
......@@ -468,40 +485,49 @@ export class WordOperations {
return null;
}
public static deleteWordEntire(ctx: DeleteWordContext, wordNavigationType: WordNavigationType): Range | null {
const wordSeparators = ctx.wordSeparators;
const model = ctx.model;
const selection = ctx.selection;
const whitespaceHeuristics = ctx.whitespaceHeuristics;
if (!selection.isEmpty()) {
return selection;
}
if (DeleteOperations.isAutoClosingPairDelete(ctx.autoClosingBrackets, ctx.autoClosingQuotes, ctx.autoClosingPairs.autoClosingPairsOpen, ctx.model, [ctx.selection])) {
const position = ctx.selection.getPosition();
return new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column + 1);
}
const position = new Position(selection.positionLineNumber, selection.positionColumn);
private static _determineDeleteRange(wordSeparators: WordCharacterClassifier, model: ICursorSimpleModel, wordNavigationType: WordNavigationType, position: Position, isEntire: boolean): Range {
let lineNumber = position.lineNumber;
let column = position.column;
let columnEnd = position.column;
let lineContent = model.getLineContent(position.lineNumber);
if (lineNumber === 1 && column === 1) {
// Ignore deleting at beginning of file
return null;
}
let prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);
if (whitespaceHeuristics) {
let r = this._deleteWordEntireWhitespace(model, position);
if (r) {
return r;
if (wordNavigationType === WordNavigationType.WordStart) {
if (prevWordOnLine) {
column = prevWordOnLine.start + 1;
if (isEntire) {
columnEnd = prevWordOnLine.end + 1;
const chCode = lineContent.charCodeAt(columnEnd - 1);
if (chCode === CharCode.Space || chCode === CharCode.Tab) {
columnEnd++;
}
}
} else {
if (column > 1) {
column = 1;
} else {
lineNumber--;
column = model.getLineMaxColumn(lineNumber);
}
}
} else {
if (prevWordOnLine && column <= prevWordOnLine.end + 1) {
prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));
}
if (prevWordOnLine) {
column = prevWordOnLine.end + 1;
} else {
if (column > 1) {
column = 1;
} else {
lineNumber--;
column = model.getLineMaxColumn(lineNumber);
}
}
}
return this._determineDeleteRange(wordSeparators, model, wordNavigationType, position, true);
return new Range(lineNumber, column, position.lineNumber, columnEnd);
}
public static _deleteWordPartLeft(model: ICursorSimpleModel, selection: Selection): Range {
......
......@@ -402,23 +402,6 @@ export class DeleteWordRightCommand extends DeleteWordCommand {
}
}
export class DeleteWordRight extends DeleteWordRightCommand {
constructor() {
super({
whitespaceHeuristics: true,
wordNavigationType: WordNavigationType.WordEnd,
id: 'deleteWordRight',
precondition: EditorContextKeys.writable,
kbOpts: {
kbExpr: EditorContextKeys.textInputFocus,
primary: KeyMod.CtrlCmd | KeyCode.Delete,
mac: { primary: KeyMod.Alt | KeyCode.Delete },
weight: KeybindingWeight.EditorContrib
}
});
}
}
export class DeleteWordStartLeft extends DeleteWordLeftCommand {
constructor() {
super({
......@@ -480,6 +463,23 @@ export class DeleteWordEndRight extends DeleteWordRightCommand {
}
}
export class DeleteWordRight extends DeleteWordRightCommand {
constructor() {
super({
whitespaceHeuristics: true,
wordNavigationType: WordNavigationType.WordEnd,
id: 'deleteWordRight',
precondition: EditorContextKeys.writable,
kbOpts: {
kbExpr: EditorContextKeys.textInputFocus,
primary: KeyMod.CtrlCmd | KeyCode.Delete,
mac: { primary: KeyMod.Alt | KeyCode.Delete },
weight: KeybindingWeight.EditorContrib
}
});
}
}
export class DeleteWordEntireCommand extends DeleteWordCommand {
protected _delete(ctx: DeleteWordContext, wordNavigationType: WordNavigationType): Range {
let r = WordOperations.deleteWordEntire(ctx, wordNavigationType);
......@@ -509,7 +509,6 @@ export class DeleteWordEntire extends DeleteWordEntireCommand {
}
}
registerEditorCommand(new CursorWordStartLeft());
registerEditorCommand(new CursorWordEndLeft());
registerEditorCommand(new CursorWordLeft());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册