提交 e0d75419 编写于 作者: M Martin Aeschlimann

fixes #4101: [html] Why editor.action.smartSelect is not working in html file?

上级 5caae080
......@@ -226,11 +226,6 @@ export interface IMode {
*/
outlineSupport?:IOutlineSupport;
/**
* Optional adapter to support logical selection.
*/
logicalSelectionSupport?:ILogicalSelectionSupport;
/**
* Optional adapter to support formatting.
*/
......@@ -503,17 +498,6 @@ export interface IOutlineSupport {
outlineGroupLabel?: { [name: string]: string; };
}
/**
* Interface used to compute a hierachry of logical ranges.
*/
export interface ILogicalSelectionEntry {
type:string;
range:editorCommon.IRange;
}
export interface ILogicalSelectionSupport {
getRangesToPosition(resource:URI, position:editorCommon.IPosition):TPromise<ILogicalSelectionEntry[]>;
}
/**
* Interface used to format a model
*/
......
......@@ -14,8 +14,7 @@ import {EditorAction} from 'vs/editor/common/editorAction';
import {Behaviour} from 'vs/editor/common/editorActionEnablement';
import {EventType, ICommonCodeEditor, ICursorPositionChangedEvent, IEditorActionDescriptorData, IEditorRange} from 'vs/editor/common/editorCommon';
import {CommonEditorRegistry, ContextKey, EditorActionDescriptor} from 'vs/editor/common/editorCommonExtensions';
import {ILogicalSelectionEntry} from 'vs/editor/common/modes';
import {TokenSelectionSupport} from './tokenSelectionSupport';
import {TokenSelectionSupport, ILogicalSelectionEntry} from './tokenSelectionSupport';
// --- selection state machine
......@@ -55,7 +54,6 @@ class SmartSelect extends EditorAction {
var selection = this.editor.getSelection();
var model = this.editor.getModel();
var selectionSupport = model.getMode().logicalSelectionSupport || this._tokenSelectionSupport;
// forget about current state
if (state) {
......@@ -66,8 +64,7 @@ class SmartSelect extends EditorAction {
var promise:TPromise<void> = TPromise.as(null);
if (!state) {
promise = selectionSupport.getRangesToPosition(model.getAssociatedResource(), selection.getStartPosition()).then((elements: ILogicalSelectionEntry[]) => {
promise = this._tokenSelectionSupport.getRangesToPosition(model.getAssociatedResource(), selection.getStartPosition()).then((elements: ILogicalSelectionEntry[]) => {
if (arrays.isFalsyOrEmpty(elements)) {
return;
......
......@@ -8,11 +8,18 @@ import URI from 'vs/base/common/uri';
import {TPromise} from 'vs/base/common/winjs.base';
import {Range} from 'vs/editor/common/core/range';
import {IModel, IPosition, IRange} from 'vs/editor/common/editorCommon';
import {ILogicalSelectionEntry, ILogicalSelectionSupport} from 'vs/editor/common/modes';
import {IModelService} from 'vs/editor/common/services/modelService';
import {Node, build, find} from './tokenTree';
export class TokenSelectionSupport implements ILogicalSelectionSupport {
/**
* Interface used to compute a hierachry of logical ranges.
*/
export interface ILogicalSelectionEntry {
type:string;
range:IRange;
}
export class TokenSelectionSupport {
private _modelService: IModelService;
......
......@@ -283,7 +283,6 @@ export class CSSMode extends AbstractMode {
public inplaceReplaceSupport:Modes.IInplaceReplaceSupport;
public configSupport:Modes.IConfigurationSupport;
public referenceSupport: Modes.IReferenceSupport;
public logicalSelectionSupport: Modes.ILogicalSelectionSupport;
public extraInfoSupport:Modes.IExtraInfoSupport;
public occurrencesSupport:Modes.IOccurrencesSupport;
public outlineSupport: Modes.IOutlineSupport;
......@@ -339,7 +338,6 @@ export class CSSMode extends AbstractMode {
// this.referenceSupport = new ReferenceSupport(this.getId(), {
// tokens: [cssTokenTypes.TOKEN_PROPERTY + '.css', cssTokenTypes.TOKEN_VALUE + '.css', cssTokenTypes.TOKEN_SELECTOR_TAG + '.css'],
// findReferences: (resource, position, /*unused*/includeDeclaration) => this.findReferences(resource, position)});
this.logicalSelectionSupport = this;
this.outlineSupport = this;
// this.declarationSupport = new DeclarationSupport(this.getId(), {
// tokens: [cssTokenTypes.TOKEN_VALUE + '.css'],
......@@ -413,11 +411,6 @@ export class CSSMode extends AbstractMode {
return this._worker((w) => w.findReferences(resource, position));
}
static $getRangesToPosition = OneWorkerAttr(CSSMode, CSSMode.prototype.getRangesToPosition);
public getRangesToPosition(resource:URI, position:EditorCommon.IPosition):WinJS.TPromise<Modes.ILogicalSelectionEntry[]> {
return this._worker((w) => w.getRangesToPosition(resource, position));
}
static $getOutline = OneWorkerAttr(CSSMode, CSSMode.prototype.getOutline);
public getOutline(resource:URI):WinJS.TPromise<Modes.IOutlineEntry[]> {
return this._worker((w) => w.getOutline(resource));
......
......@@ -210,34 +210,6 @@ export class CSSWorker {
}
public getRangesToPosition(resource:URI, position:EditorCommon.IPosition):winjs.TPromise<Modes.ILogicalSelectionEntry[]> {
return this.languageService.join().then(() => {
let model = this.resourceService.get(resource),
offset = model.getOffsetFromPosition(position),
styleSheet = this.languageService.getStylesheet(resource),
path = nodes.getNodePath(styleSheet, offset),
result: Modes.ILogicalSelectionEntry[] = [];
for (let i = 0; i < path.length; i++) {
let node = path[i];
if(node.offset === -1 || node.length === -1) {
continue;
}
if(node.parent && node.parent.offset === node.offset && node.parent.length === node.length) {
continue;
}
result.push({
type: 'node',
range: this._range(node, model)
});
}
return result;
});
}
public getOutline(resource:URI):winjs.TPromise<Modes.IOutlineEntry[]> {
return this.languageService.join().then(() => {
......
......@@ -294,7 +294,6 @@ export class HTMLMode<W extends htmlWorker.HTMLWorker> extends AbstractMode impl
public extraInfoSupport:Modes.IExtraInfoSupport;
public occurrencesSupport:Modes.IOccurrencesSupport;
public referenceSupport: Modes.IReferenceSupport;
public logicalSelectionSupport: Modes.ILogicalSelectionSupport;
public formattingSupport: Modes.IFormattingSupport;
public parameterHintsSupport: Modes.IParameterHintsSupport;
public suggestSupport: Modes.ISuggestSupport;
......@@ -325,7 +324,6 @@ export class HTMLMode<W extends htmlWorker.HTMLWorker> extends AbstractMode impl
this.referenceSupport = new ReferenceSupport(this.getId(), {
tokens: ['invalid'],
findReferences: (resource, position, includeDeclaration) => this.findReferences(resource, position, includeDeclaration)});
this.logicalSelectionSupport = this;
this.parameterHintsSupport = new ParameterHintsSupport(this.getId(), {
triggerCharacters: ['(', ','],
......@@ -495,11 +493,6 @@ export class HTMLMode<W extends htmlWorker.HTMLWorker> extends AbstractMode impl
return this._worker((w) => w.findReferences(resource, position, includeDeclaration));
}
static $getRangesToPosition = OneWorkerAttr(HTMLMode, HTMLMode.prototype.getRangesToPosition);
public getRangesToPosition(resource:URI, position:EditorCommon.IPosition):winjs.TPromise<Modes.ILogicalSelectionEntry[]> {
return this._worker((w) => w.getRangesToPosition(resource, position));
}
static $findDeclaration = OneWorkerAttr(HTMLMode, HTMLMode.prototype.findDeclaration);
public findDeclaration(resource:URI, position:EditorCommon.IPosition):winjs.TPromise<Modes.IReference> {
return this._worker((w) => w.findDeclaration(resource, position));
......
......@@ -166,14 +166,6 @@ export class HTMLWorker {
});
}
public getRangesToPosition(resource:URI, position:EditorCommon.IPosition):winjs.TPromise<Modes.ILogicalSelectionEntry[]> {
return this._delegateToModeAtPosition(resource, position, (isEmbeddedMode, model) => {
if (isEmbeddedMode && model.getMode().logicalSelectionSupport) {
return model.getMode().logicalSelectionSupport.getRangesToPosition(model.getAssociatedResource(), position);
}
});
}
public findDeclaration(resource:URI, position:EditorCommon.IPosition):winjs.TPromise<Modes.IReference> {
return this._delegateToModeAtPosition(resource, position, (isEmbeddedMode, model) => {
if (isEmbeddedMode && model.getMode().declarationSupport) {
......
......@@ -181,7 +181,6 @@ export class LESSMode extends Monarch.MonarchMode implements Modes.IExtraInfoSup
public inplaceReplaceSupport:Modes.IInplaceReplaceSupport;
public configSupport:Modes.IConfigurationSupport;
public referenceSupport: Modes.IReferenceSupport;
public logicalSelectionSupport: Modes.ILogicalSelectionSupport;
public extraInfoSupport: Modes.IExtraInfoSupport;
public declarationSupport: Modes.IDeclarationSupport;
public outlineSupport: Modes.IOutlineSupport;
......@@ -211,7 +210,6 @@ export class LESSMode extends Monarch.MonarchMode implements Modes.IExtraInfoSup
this.referenceSupport = new ReferenceSupport(this.getId(), {
tokens: [lessTokenTypes.TOKEN_PROPERTY + '.less', lessTokenTypes.TOKEN_VALUE + '.less', 'variable.less', lessTokenTypes.TOKEN_SELECTOR + '.class.less', lessTokenTypes.TOKEN_SELECTOR + '.id.less', 'selector.less'],
findReferences: (resource, position, /*unused*/includeDeclaration) => this.findReferences(resource, position)});
this.logicalSelectionSupport = this;
this.declarationSupport = new DeclarationSupport(this.getId(), {
tokens: ['variable.less', lessTokenTypes.TOKEN_SELECTOR + '.class.less', lessTokenTypes.TOKEN_SELECTOR + '.id.less', 'selector.less'],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
......@@ -267,11 +265,6 @@ export class LESSMode extends Monarch.MonarchMode implements Modes.IExtraInfoSup
return this._worker((w) => w.suggest(resource, position));
}
static $getRangesToPosition = OneWorkerAttr(LESSMode, LESSMode.prototype.getRangesToPosition);
public getRangesToPosition(resource:URI, position:EditorCommon.IPosition):winjs.TPromise<Modes.ILogicalSelectionEntry[]> {
return this._worker((w) => w.getRangesToPosition(resource, position));
}
static $computeInfo = OneWorkerAttr(LESSMode, LESSMode.prototype.computeInfo);
public computeInfo(resource:URI, position:EditorCommon.IPosition): winjs.TPromise<Modes.IComputeExtraInfoResult> {
return this._worker((w) => w.computeInfo(resource, position));
......
......@@ -283,7 +283,6 @@ export class SASSMode extends Monarch.MonarchMode implements Modes.IExtraInfoSup
public inplaceReplaceSupport:Modes.IInplaceReplaceSupport;
public configSupport:Modes.IConfigurationSupport;
public referenceSupport: Modes.IReferenceSupport;
public logicalSelectionSupport: Modes.ILogicalSelectionSupport;
public extraInfoSupport: Modes.IExtraInfoSupport;
public outlineSupport: Modes.IOutlineSupport;
public declarationSupport: Modes.IDeclarationSupport;
......@@ -313,7 +312,6 @@ export class SASSMode extends Monarch.MonarchMode implements Modes.IExtraInfoSup
this.referenceSupport = new ReferenceSupport(this.getId(), {
tokens: [sassTokenTypes.TOKEN_PROPERTY + '.sass', sassTokenTypes.TOKEN_VALUE + '.sass', 'variable.decl.sass', 'variable.ref.sass', 'support.function.name.sass', sassTokenTypes.TOKEN_PROPERTY + '.sass', sassTokenTypes.TOKEN_SELECTOR + '.sass'],
findReferences: (resource, position, /*unused*/includeDeclaration) => this.findReferences(resource, position)});
this.logicalSelectionSupport = this;
this.declarationSupport = new DeclarationSupport(this.getId(), {
tokens: ['variable.decl.sass', 'variable.ref.sass', 'support.function.name.sass', sassTokenTypes.TOKEN_PROPERTY + '.sass', sassTokenTypes.TOKEN_SELECTOR + '.sass'],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
......@@ -369,11 +367,6 @@ export class SASSMode extends Monarch.MonarchMode implements Modes.IExtraInfoSup
return this._worker((w) => w.suggest(resource, position));
}
static $getRangesToPosition = OneWorkerAttr(SASSMode, SASSMode.prototype.getRangesToPosition);
public getRangesToPosition(resource:URI, position:EditorCommon.IPosition):winjs.TPromise<Modes.ILogicalSelectionEntry[]> {
return this._worker((w) => w.getRangesToPosition(resource, position));
}
static $computeInfo = OneWorkerAttr(SASSMode, SASSMode.prototype.computeInfo);
public computeInfo(resource:URI, position:EditorCommon.IPosition): winjs.TPromise<Modes.IComputeExtraInfoResult> {
return this._worker((w) => w.computeInfo(resource, position));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册