diff --git a/extensions/html/server/src/modes/pathCompletion.ts b/extensions/html/server/src/modes/pathCompletion.ts index 160fd96a6e8..c6d80dc8df5 100644 --- a/extensions/html/server/src/modes/pathCompletion.ts +++ b/extensions/html/server/src/modes/pathCompletion.ts @@ -75,7 +75,7 @@ export function providePathSuggestions(value: string, range: Range, activeDocFsP return []; } - const replaceRange = Range.create(Position.create(range.end.line, range.end.character - valueAfterLastSlash.length), range.end); + const replaceRange = getReplaceRange(range, valueAfterLastSlash); return fs.readdirSync(parentDir).map(f => { return { @@ -98,6 +98,12 @@ function resolveWorkspaceRoot(activeDoc: TextDocument, workspaceFolders: Propose } } +function getReplaceRange(valueRange: Range, valueAfterLastSlash: string): Range { + const start = Position.create(valueRange.end.line, valueRange.end.character - 1 - valueAfterLastSlash.length); + const end = Position.create(valueRange.end.line, valueRange.end.character - 1); + return Range.create(start, end); +} + // Selected from https://stackoverflow.com/a/2725168/1780148 const PATH_TAG_AND_ATTR: { [tag: string]: string | string[] } = { // HTML 4 diff --git a/extensions/html/server/src/test/completions.test.ts b/extensions/html/server/src/test/completions.test.ts index 9aa5d1f0340..1777c039cd5 100644 --- a/extensions/html/server/src/test/completions.test.ts +++ b/extensions/html/server/src/test/completions.test.ts @@ -7,6 +7,7 @@ import 'mocha'; import * as assert from 'assert'; import * as path from 'path'; +import Uri from 'vscode-uri'; import { TextDocument, CompletionList, CompletionItemKind, } from 'vscode-languageserver-types'; import { getLanguageModes } from '../modes/languageModes'; import { applyEdits } from '../utils/edits'; @@ -92,7 +93,7 @@ suite('Completions', () => { ] }); }); -/* + test('Path completion', function (): any { let testUri = Uri.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/foo.html')).fsPath; @@ -101,33 +102,34 @@ suite('Completions', () => { { label: 'about.html', resultText: '