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

Reduce diff

上级 2a499549
...@@ -374,24 +374,43 @@ export class WordOperations { ...@@ -374,24 +374,43 @@ export class WordOperations {
return null; 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 lineNumber = position.lineNumber;
let column = position.column; 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); let prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);
if (wordNavigationType === WordNavigationType.WordStart) { if (wordNavigationType === WordNavigationType.WordStart) {
if (prevWordOnLine) { if (prevWordOnLine) {
column = prevWordOnLine.start + 1; 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 { } else {
if (column > 1) { if (column > 1) {
column = 1; column = 1;
...@@ -416,11 +435,10 @@ export class WordOperations { ...@@ -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 deleteWordEntire(ctx: DeleteWordContext, wordNavigationType: WordNavigationType): Range | null {
public static deleteWordLeft(ctx: DeleteWordContext, wordNavigationType: WordNavigationType): Range | null {
const wordSeparators = ctx.wordSeparators; const wordSeparators = ctx.wordSeparators;
const model = ctx.model; const model = ctx.model;
const selection = ctx.selection; const selection = ctx.selection;
...@@ -446,17 +464,16 @@ export class WordOperations { ...@@ -446,17 +464,16 @@ export class WordOperations {
} }
if (whitespaceHeuristics) { if (whitespaceHeuristics) {
let r = this._deleteWordLeftWhitespace(model, position); let r = this._deleteWordEntireWhitespace(model, position);
if (r) { if (r) {
return r; return r;
} }
} }
return this._determineDeleteRange(wordSeparators, model, wordNavigationType, position, false); return this._determineDeleteRange(wordSeparators, model, wordNavigationType, position, true);
} }
private static _deleteWordEntireWhitespace(model: ICursorSimpleModel, position: Position): Range | null {
protected static _deleteWordEntireWhitespace(model: ICursorSimpleModel, position: Position): Range | null {
const lineContent = model.getLineContent(position.lineNumber); const lineContent = model.getLineContent(position.lineNumber);
const startIndex1 = position.column - 1; // deleteRight const startIndex1 = position.column - 1; // deleteRight
const startIndex2 = position.column - 2; // deleteLeft const startIndex2 = position.column - 2; // deleteLeft
...@@ -468,40 +485,49 @@ export class WordOperations { ...@@ -468,40 +485,49 @@ export class WordOperations {
return null; return null;
} }
private static _determineDeleteRange(wordSeparators: WordCharacterClassifier, model: ICursorSimpleModel, wordNavigationType: WordNavigationType, position: Position, isEntire: boolean): Range {
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);
let lineNumber = position.lineNumber; let lineNumber = position.lineNumber;
let column = position.column; let column = position.column;
let columnEnd = position.column;
let lineContent = model.getLineContent(position.lineNumber);
if (lineNumber === 1 && column === 1) { let prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);
// Ignore deleting at beginning of file
return null;
}
if (whitespaceHeuristics) { if (wordNavigationType === WordNavigationType.WordStart) {
let r = this._deleteWordEntireWhitespace(model, position); if (prevWordOnLine) {
if (r) { column = prevWordOnLine.start + 1;
return r; 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 { public static _deleteWordPartLeft(model: ICursorSimpleModel, selection: Selection): Range {
......
...@@ -402,23 +402,6 @@ export class DeleteWordRightCommand extends DeleteWordCommand { ...@@ -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 { export class DeleteWordStartLeft extends DeleteWordLeftCommand {
constructor() { constructor() {
super({ super({
...@@ -480,6 +463,23 @@ export class DeleteWordEndRight extends DeleteWordRightCommand { ...@@ -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 { export class DeleteWordEntireCommand extends DeleteWordCommand {
protected _delete(ctx: DeleteWordContext, wordNavigationType: WordNavigationType): Range { protected _delete(ctx: DeleteWordContext, wordNavigationType: WordNavigationType): Range {
let r = WordOperations.deleteWordEntire(ctx, wordNavigationType); let r = WordOperations.deleteWordEntire(ctx, wordNavigationType);
...@@ -509,7 +509,6 @@ export class DeleteWordEntire extends DeleteWordEntireCommand { ...@@ -509,7 +509,6 @@ export class DeleteWordEntire extends DeleteWordEntireCommand {
} }
} }
registerEditorCommand(new CursorWordStartLeft()); registerEditorCommand(new CursorWordStartLeft());
registerEditorCommand(new CursorWordEndLeft()); registerEditorCommand(new CursorWordEndLeft());
registerEditorCommand(new CursorWordLeft()); registerEditorCommand(new CursorWordLeft());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册