Skip to content

Commit 1501f11

Browse files
committed
Keep space before word
Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>
1 parent 51f9c9c commit 1501f11

2 files changed

Lines changed: 29 additions & 2 deletions

File tree

src/languageservice/services/yamlCompletion.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ export class YAMLCompletion extends JSONCompletion {
6363
if (!this.completion) {
6464
return Promise.resolve(result);
6565
}
66+
const originalPosition = Position.create(position.line, position.character);
6667
const completionFix = this.completionHelper(document, position);
6768
const newText = completionFix.newText;
6869
const doc = parseYAML(newText);
@@ -101,11 +102,11 @@ export class YAMLCompletion extends JSONCompletion {
101102
} else if (node && (node.type === 'string' || node.type === 'number' || node.type === 'boolean')) {
102103
overwriteRange = Range.create(document.positionAt(node.offset), document.positionAt(node.offset + node.length));
103104
} else {
104-
let overwriteStart = offset - currentWord.length;
105+
let overwriteStart = document.offsetAt(originalPosition) - currentWord.length;
105106
if (overwriteStart > 0 && document.getText()[overwriteStart - 1] === '"') {
106107
overwriteStart--;
107108
}
108-
overwriteRange = Range.create(document.positionAt(overwriteStart), position);
109+
overwriteRange = Range.create(document.positionAt(overwriteStart), originalPosition);
109110
}
110111

111112
const proposed: { [key: string]: CompletionItem } = {};

test/defaultSnippets.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,5 +227,31 @@ suite('Default Snippet Tests', () => {
227227
})
228228
.then(done, done);
229229
});
230+
231+
it('should preserve space after ":" with prefix', async () => {
232+
const content = 'boolean: tr\n';
233+
const result = await parseSetup(content, 9);
234+
235+
assert.notEqual(result.items.length, 0);
236+
assert.equal(result.items[0].label, 'My boolean item');
237+
assert.equal(result.items[0].textEdit.newText, 'false');
238+
assert.equal(result.items[0].textEdit.range.start.line, 0);
239+
assert.equal(result.items[0].textEdit.range.start.character, 9);
240+
assert.equal(result.items[0].textEdit.range.end.line, 0);
241+
assert.equal(result.items[0].textEdit.range.end.character, 9);
242+
});
243+
244+
it('should preserve space after ":"', async () => {
245+
const content = 'boolean: ';
246+
const result = await parseSetup(content, 9);
247+
248+
assert.notEqual(result.items.length, 0);
249+
assert.equal(result.items[0].label, 'My boolean item');
250+
assert.equal(result.items[0].textEdit.newText, 'false');
251+
assert.equal(result.items[0].textEdit.range.start.line, 0);
252+
assert.equal(result.items[0].textEdit.range.start.character, 9);
253+
assert.equal(result.items[0].textEdit.range.end.line, 0);
254+
assert.equal(result.items[0].textEdit.range.end.character, 9);
255+
});
230256
});
231257
});

0 commit comments

Comments
 (0)