Skip to content

Commit 6ad61f0

Browse files
committed
Getting closer to shared config microsoft#59803
1 parent 5ae10c4 commit 6ad61f0

19 files changed

Lines changed: 127 additions & 121 deletions

extensions/emmet/src/abbreviationActions.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -340,9 +340,7 @@ export function expandEmmetAbbreviation(args: any): Thenable<boolean | undefined
340340
});
341341

342342
return expandAbbreviationInRange(editor, abbreviationList, allAbbreviationsSame).then(success => {
343-
if (!success) {
344-
return fallbackTab();
345-
}
343+
return success ? Promise.resolve(undefined) : fallbackTab();
346344
});
347345
}
348346

@@ -581,7 +579,7 @@ function expandAbbreviationInRange(editor: vscode.TextEditor, expandAbbrList: Ex
581579
/**
582580
* Expands abbreviation as detailed in given input.
583581
*/
584-
function expandAbbr(input: ExpandAbbreviationInput): string | undefined {
582+
function expandAbbr(input: ExpandAbbreviationInput): string {
585583
const helper = getEmmetHelper();
586584
const expandOptions = helper.getExpandOptions(input.syntax, getEmmetConfiguration(input.syntax), input.filter);
587585

@@ -601,9 +599,9 @@ function expandAbbr(input: ExpandAbbreviationInput): string | undefined {
601599
}
602600
}
603601

602+
let expandedText;
604603
try {
605604
// Expand the abbreviation
606-
let expandedText;
607605

608606
if (input.textToWrap) {
609607
let parsedAbbr = helper.parseAbbreviation(input.abbreviation, expandOptions);
@@ -628,13 +626,11 @@ function expandAbbr(input: ExpandAbbreviationInput): string | undefined {
628626
expandedText = helper.expandAbbreviation(input.abbreviation, expandOptions);
629627
}
630628

631-
return expandedText;
632-
633629
} catch (e) {
634630
vscode.window.showErrorMessage('Failed to expand abbreviation');
635631
}
636632

637-
633+
return expandedText;
638634
}
639635

640636
function getSyntaxFromArgs(args: { [x: string]: string }): string | undefined {

extensions/emmet/src/defaultCompletionProvider.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi
1212

1313
private lastCompletionType: string | undefined;
1414

15-
public provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {
16-
const completionResult = this.provideCompletionItemsInternal(document, position, token, context);
15+
public provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, _: vscode.CancellationToken, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {
16+
const completionResult = this.provideCompletionItemsInternal(document, position, context);
1717
if (!completionResult) {
1818
this.lastCompletionType = undefined;
1919
return;
@@ -38,7 +38,7 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi
3838
});
3939
}
4040

41-
private provideCompletionItemsInternal(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {
41+
private provideCompletionItemsInternal(document: vscode.TextDocument, position: vscode.Position, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {
4242
const emmetConfig = vscode.workspace.getConfiguration('emmet');
4343
const excludedLanguages = emmetConfig['excludeLanguages'] ? emmetConfig['excludeLanguages'] : [];
4444
if (excludedLanguages.indexOf(document.languageId) > -1) {

extensions/emmet/src/editPoint.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,5 @@ function findEditPoint(lineNum: number, editor: vscode.TextEditor, position: vsc
6969
if (winner > -1) {
7070
return new vscode.Selection(lineNum, winner + 1, lineNum, winner + 1);
7171
}
72+
return;
7273
}

extensions/emmet/src/incrementDecrement.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export function update(numString: string, delta: number): string {
4545

4646
if (m = numString.match(/^\-?(0\d+)/)) {
4747
// padded number: preserve padding
48-
output = output.replace(/^(\-?)(\d+)/, (str, minus, prefix) =>
48+
output = output.replace(/^(\-?)(\d+)/, (_, minus, prefix) =>
4949
minus + '0'.repeat(Math.max(0, (m ? m[1].length : 0) - prefix.length)) + prefix);
5050
}
5151

@@ -102,6 +102,8 @@ export function locate(document: vscode.TextDocument, pos: vscode.Position): vsc
102102
if (start !== end && isValidNumber(line.slice(start, end))) {
103103
return new vscode.Range(pos.line, start, pos.line, end);
104104
}
105+
106+
return;
105107
}
106108

107109
/**

extensions/emmet/src/locateFile.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function resolveAbsolute(basePath: string, filePath: string): Promise<string> {
5151

5252
const next = (ctx: string) => {
5353
tryFile(path.resolve(ctx, filePath))
54-
.then(resolve, err => {
54+
.then(resolve, () => {
5555
const dir = path.dirname(ctx);
5656
if (!dir || dir === ctx) {
5757
return reject(`Unable to locate absolute file ${filePath}`);

extensions/emmet/src/selectItem.ts

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,13 @@ import * as vscode from 'vscode';
77
import { validate, parseDocument, isStyleSheet } from './util';
88
import { nextItemHTML, prevItemHTML } from './selectItemHTML';
99
import { nextItemStylesheet, prevItemStylesheet } from './selectItemStylesheet';
10+
import { HtmlNode, CssNode } from 'EmmetNode';
1011

1112
export function fetchSelectItem(direction: string): void {
1213
if (!validate() || !vscode.window.activeTextEditor) {
1314
return;
1415
}
1516
const editor = vscode.window.activeTextEditor;
16-
17-
let nextItem: any;
18-
let prevItem: any;
19-
20-
if (isStyleSheet(editor.document.languageId)) {
21-
nextItem = nextItemStylesheet;
22-
prevItem = prevItemStylesheet;
23-
} else {
24-
nextItem = nextItemHTML;
25-
prevItem = prevItemHTML;
26-
}
27-
2817
let rootNode = parseDocument(editor.document);
2918
if (!rootNode) {
3019
return;
@@ -35,7 +24,12 @@ export function fetchSelectItem(direction: string): void {
3524
const selectionStart = selection.isReversed ? selection.active : selection.anchor;
3625
const selectionEnd = selection.isReversed ? selection.anchor : selection.active;
3726

38-
let updatedSelection = direction === 'next' ? nextItem(selectionStart, selectionEnd, editor, rootNode) : prevItem(selectionStart, selectionEnd, editor, rootNode);
27+
let updatedSelection;
28+
if (isStyleSheet(editor.document.languageId)) {
29+
updatedSelection = direction === 'next' ? nextItemStylesheet(selectionStart, selectionEnd, <CssNode>rootNode!) : prevItemStylesheet(selectionStart, selectionEnd, <CssNode>rootNode!);
30+
} else {
31+
updatedSelection = direction === 'next' ? nextItemHTML(selectionStart, selectionEnd, editor, <HtmlNode>rootNode!) : prevItemHTML(selectionStart, selectionEnd, editor, <HtmlNode>rootNode!);
32+
}
3933
newSelections.push(updatedSelection ? updatedSelection : selection);
4034
});
4135
editor.selections = newSelections;

extensions/emmet/src/selectItemHTML.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import * as vscode from 'vscode';
77
import { getDeepestNode, findNextWord, findPrevWord, getHtmlNode } from './util';
88
import { HtmlNode } from 'EmmetNode';
9+
import { isNumber } from 'util';
910

1011
export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vscode.Position, editor: vscode.TextEditor, rootNode: HtmlNode): vscode.Selection | undefined {
1112
let currentNode = getHtmlNode(editor.document, rootNode, selectionEnd, false);
@@ -18,12 +19,12 @@ export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vsco
1819
if (currentNode.type !== 'comment') {
1920
// If cursor is in the tag name, select tag
2021
if (selectionEnd.isBefore(currentNode.open.start.translate(0, currentNode.name.length))) {
21-
return getSelectionFromNode(currentNode, editor.document);
22+
return getSelectionFromNode(currentNode);
2223
}
2324

2425
// If cursor is in the open tag, look for attributes
2526
if (selectionEnd.isBefore(currentNode.open.end)) {
26-
let attrSelection = getNextAttribute(selectionStart, selectionEnd, editor.document, currentNode);
27+
let attrSelection = getNextAttribute(selectionStart, selectionEnd, currentNode);
2728
if (attrSelection) {
2829
return attrSelection;
2930
}
@@ -50,7 +51,7 @@ export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vsco
5051
}
5152
}
5253

53-
return nextNode && getSelectionFromNode(nextNode, editor.document);
54+
return nextNode && getSelectionFromNode(nextNode);
5455
}
5556

5657
export function prevItemHTML(selectionStart: vscode.Position, selectionEnd: vscode.Position, editor: vscode.TextEditor, rootNode: HtmlNode): vscode.Selection | undefined {
@@ -98,11 +99,11 @@ export function prevItemHTML(selectionStart: vscode.Position, selectionEnd: vsco
9899
return undefined;
99100
}
100101

101-
let attrSelection = getPrevAttribute(selectionStart, selectionEnd, editor.document, prevNode);
102-
return attrSelection ? attrSelection : getSelectionFromNode(prevNode, editor.document);
102+
let attrSelection = getPrevAttribute(selectionStart, selectionEnd, prevNode);
103+
return attrSelection ? attrSelection : getSelectionFromNode(prevNode);
103104
}
104105

105-
function getSelectionFromNode(node: HtmlNode, document: vscode.TextDocument): vscode.Selection | undefined {
106+
function getSelectionFromNode(node: HtmlNode): vscode.Selection | undefined {
106107
if (node && node.open) {
107108
let selectionStart = (<vscode.Position>node.open.start).translate(0, 1);
108109
let selectionEnd = selectionStart.translate(0, node.name.length);
@@ -112,7 +113,7 @@ function getSelectionFromNode(node: HtmlNode, document: vscode.TextDocument): vs
112113
return undefined;
113114
}
114115

115-
function getNextAttribute(selectionStart: vscode.Position, selectionEnd: vscode.Position, document: vscode.TextDocument, node: HtmlNode): vscode.Selection | undefined {
116+
function getNextAttribute(selectionStart: vscode.Position, selectionEnd: vscode.Position, node: HtmlNode): vscode.Selection | undefined {
116117

117118
if (!node.attributes || node.attributes.length === 0 || node.type === 'comment') {
118119
return;
@@ -153,6 +154,9 @@ function getNextAttribute(selectionStart: vscode.Position, selectionEnd: vscode.
153154

154155
if (pos !== undefined) {
155156
let [newSelectionStartOffset, newSelectionEndOffset] = findNextWord(attr.value.toString(), pos);
157+
if (!isNumber(newSelectionStartOffset) || !isNumber(newSelectionEndOffset)) {
158+
return;
159+
}
156160
if (newSelectionStartOffset >= 0 && newSelectionEndOffset >= 0) {
157161
const newSelectionStart = (<vscode.Position>attr.value.start).translate(0, newSelectionStartOffset);
158162
const newSelectionEnd = (<vscode.Position>attr.value.start).translate(0, newSelectionEndOffset);
@@ -161,9 +165,11 @@ function getNextAttribute(selectionStart: vscode.Position, selectionEnd: vscode.
161165
}
162166

163167
}
168+
169+
return;
164170
}
165171

166-
function getPrevAttribute(selectionStart: vscode.Position, selectionEnd: vscode.Position, document: vscode.TextDocument, node: HtmlNode): vscode.Selection | undefined {
172+
function getPrevAttribute(selectionStart: vscode.Position, selectionEnd: vscode.Position, node: HtmlNode): vscode.Selection | undefined {
167173

168174
if (!node.attributes || node.attributes.length === 0 || node.type === 'comment') {
169175
return;
@@ -194,12 +200,15 @@ function getPrevAttribute(selectionStart: vscode.Position, selectionEnd: vscode.
194200

195201
let pos = selectionStart.isAfter(attr.value.end) ? attr.value.toString().length : selectionStart.character - attr.value.start.character;
196202
let [newSelectionStartOffset, newSelectionEndOffset] = findPrevWord(attr.value.toString(), pos);
203+
if (!isNumber(newSelectionStartOffset) || !isNumber(newSelectionEndOffset)) {
204+
return;
205+
}
197206
if (newSelectionStartOffset >= 0 && newSelectionEndOffset >= 0) {
198207
const newSelectionStart = (<vscode.Position>attr.value.start).translate(0, newSelectionStartOffset);
199208
const newSelectionEnd = (<vscode.Position>attr.value.start).translate(0, newSelectionEndOffset);
200209
return new vscode.Selection(newSelectionStart, newSelectionEnd);
201210
}
202-
203-
204211
}
212+
213+
return;
205214
}

extensions/emmet/src/selectItemStylesheet.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as vscode from 'vscode';
77
import { getDeepestNode, findNextWord, findPrevWord, getNode } from './util';
88
import { Node, CssNode, Rule, Property } from 'EmmetNode';
99

10-
export function nextItemStylesheet(startOffset: vscode.Position, endOffset: vscode.Position, editor: vscode.TextEditor, rootNode: Node): vscode.Selection | undefined {
10+
export function nextItemStylesheet(startOffset: vscode.Position, endOffset: vscode.Position, rootNode: Node): vscode.Selection | undefined {
1111
let currentNode = <CssNode>getNode(rootNode, endOffset, true);
1212
if (!currentNode) {
1313
currentNode = <CssNode>rootNode;
@@ -17,12 +17,12 @@ export function nextItemStylesheet(startOffset: vscode.Position, endOffset: vsco
1717
}
1818
// Full property is selected, so select full property value next
1919
if (currentNode.type === 'property' && startOffset.isEqual(currentNode.start) && endOffset.isEqual(currentNode.end)) {
20-
return getSelectionFromProperty(currentNode, editor.document, startOffset, endOffset, true, 'next');
20+
return getSelectionFromProperty(currentNode, startOffset, endOffset, true, 'next');
2121
}
2222

2323
// Part or whole of propertyValue is selected, so select the next word in the propertyValue
2424
if (currentNode.type === 'property' && startOffset.isAfterOrEqual((<Property>currentNode).valueToken.start) && endOffset.isBeforeOrEqual((<Property>currentNode).valueToken.end)) {
25-
let singlePropertyValue = getSelectionFromProperty(currentNode, editor.document, startOffset, endOffset, false, 'next');
25+
let singlePropertyValue = getSelectionFromProperty(currentNode, startOffset, endOffset, false, 'next');
2626
if (singlePropertyValue) {
2727
return singlePropertyValue;
2828
}
@@ -31,7 +31,7 @@ export function nextItemStylesheet(startOffset: vscode.Position, endOffset: vsco
3131
// Cursor is in the selector or in a property
3232
if ((currentNode.type === 'rule' && endOffset.isBefore((<Rule>currentNode).selectorToken.end))
3333
|| (currentNode.type === 'property' && endOffset.isBefore((<Property>currentNode).valueToken.end))) {
34-
return getSelectionFromNode(currentNode, editor.document);
34+
return getSelectionFromNode(currentNode);
3535
}
3636

3737
// Get the first child of current node which is right after the cursor
@@ -46,11 +46,11 @@ export function nextItemStylesheet(startOffset: vscode.Position, endOffset: vsco
4646
currentNode = currentNode.parent;
4747
}
4848

49-
return getSelectionFromNode(nextNode, editor.document);
49+
return getSelectionFromNode(nextNode);
5050

5151
}
5252

53-
export function prevItemStylesheet(startOffset: vscode.Position, endOffset: vscode.Position, editor: vscode.TextEditor, rootNode: CssNode): vscode.Selection | undefined {
53+
export function prevItemStylesheet(startOffset: vscode.Position, endOffset: vscode.Position, rootNode: CssNode): vscode.Selection | undefined {
5454
let currentNode = <CssNode>getNode(rootNode, startOffset, false);
5555
if (!currentNode) {
5656
currentNode = rootNode;
@@ -61,19 +61,19 @@ export function prevItemStylesheet(startOffset: vscode.Position, endOffset: vsco
6161

6262
// Full property value is selected, so select the whole property next
6363
if (currentNode.type === 'property' && startOffset.isEqual((<Property>currentNode).valueToken.start) && endOffset.isEqual((<Property>currentNode).valueToken.end)) {
64-
return getSelectionFromNode(currentNode, editor.document);
64+
return getSelectionFromNode(currentNode);
6565
}
6666

6767
// Part of propertyValue is selected, so select the prev word in the propertyValue
6868
if (currentNode.type === 'property' && startOffset.isAfterOrEqual((<Property>currentNode).valueToken.start) && endOffset.isBeforeOrEqual((<Property>currentNode).valueToken.end)) {
69-
let singlePropertyValue = getSelectionFromProperty(currentNode, editor.document, startOffset, endOffset, false, 'prev');
69+
let singlePropertyValue = getSelectionFromProperty(currentNode, startOffset, endOffset, false, 'prev');
7070
if (singlePropertyValue) {
7171
return singlePropertyValue;
7272
}
7373
}
7474

7575
if (currentNode.type === 'property' || !currentNode.firstChild || (currentNode.type === 'rule' && startOffset.isBeforeOrEqual(currentNode.firstChild.start))) {
76-
return getSelectionFromNode(currentNode, editor.document);
76+
return getSelectionFromNode(currentNode);
7777
}
7878

7979
// Select the child that appears just before the cursor
@@ -83,12 +83,12 @@ export function prevItemStylesheet(startOffset: vscode.Position, endOffset: vsco
8383
}
8484
prevNode = <CssNode>getDeepestNode(prevNode);
8585

86-
return getSelectionFromProperty(prevNode, editor.document, startOffset, endOffset, false, 'prev');
86+
return getSelectionFromProperty(prevNode, startOffset, endOffset, false, 'prev');
8787

8888
}
8989

9090

91-
function getSelectionFromNode(node: Node, document: vscode.TextDocument): vscode.Selection | undefined {
91+
function getSelectionFromNode(node: Node): vscode.Selection | undefined {
9292
if (!node) {
9393
return;
9494
}
@@ -98,7 +98,7 @@ function getSelectionFromNode(node: Node, document: vscode.TextDocument): vscode
9898
}
9999

100100

101-
function getSelectionFromProperty(node: Node, document: vscode.TextDocument, selectionStart: vscode.Position, selectionEnd: vscode.Position, selectFullValue: boolean, direction: string): vscode.Selection | undefined {
101+
function getSelectionFromProperty(node: Node, selectionStart: vscode.Position, selectionEnd: vscode.Position, selectFullValue: boolean, direction: string): vscode.Selection | undefined {
102102
if (!node || node.type !== 'property') {
103103
return;
104104
}

0 commit comments

Comments
 (0)