From 3354ae92f75fc86994ef7eb85fdd7537d078b21f Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Tue, 17 May 2016 15:59:59 +0200 Subject: [PATCH] fix #5918 --- .../src/features/jsonContributions.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/extensions/javascript/src/features/jsonContributions.ts b/extensions/javascript/src/features/jsonContributions.ts index 1926b38fab7..e33ff6d1e91 100644 --- a/extensions/javascript/src/features/jsonContributions.ts +++ b/extensions/javascript/src/features/jsonContributions.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import {Location, getLocation, createScanner, SyntaxKind} from 'jsonc-parser'; +import {Location, getLocation, createScanner, SyntaxKind, ScanError} from 'jsonc-parser'; import {basename} from 'path'; import {BowerJSONContribution} from './bowerJSONContribution'; import {PackageJSONContribution} from './packageJSONContribution'; @@ -122,10 +122,7 @@ export class JSONCompletionItemProvider implements CompletionItemProvider { if (location.isAtPropertyKey) { let addValue = !location.previousNode || !location.previousNode.columnOffset; - let scanner = createScanner(document.getText(), true); - scanner.setPosition(offset); - scanner.scan(); - let isLast = scanner.getToken() === SyntaxKind.CloseBraceToken || scanner.getToken() === SyntaxKind.EOF; + let isLast = this.isLast(document, position); collectPromise = this.jsonContribution.collectPropertySuggestions(fileName, location, currentWord, addValue, isLast, collector); } else { if (location.path.length === 0) { @@ -153,4 +150,14 @@ export class JSONCompletionItemProvider implements CompletionItemProvider { } return text.substring(i+1, position.character); } + + private isLast(document: TextDocument, position: Position):boolean { + let scanner = createScanner(document.getText(), true); + scanner.setPosition(document.offsetAt(position)); + let nextToken = scanner.scan(); + if (nextToken === SyntaxKind.StringLiteral && scanner.getTokenError() === ScanError.UnexpectedEndOfString) { + nextToken= scanner.scan(); + } + return nextToken === SyntaxKind.CloseBraceToken || nextToken === SyntaxKind.EOF; + } } \ No newline at end of file