From 311d4c0782f3cdb78cf892305bae2412469590a8 Mon Sep 17 00:00:00 2001
From: chemzqm <chemzqm@gmail.com>
Date: Wed, 24 Oct 2018 20:45:48 +0800
Subject: [PATCH] remvoe commaAfterImport option, use noSemicolons

---
 package.json                                    | 11 +----------
 src/server/features/completionItemProvider.ts   | 10 +++++++---
 src/server/features/fileConfigurationManager.ts |  2 --
 src/server/features/organizeImports.ts          |  8 ++++----
 4 files changed, 12 insertions(+), 19 deletions(-)

diff --git a/package.json b/package.json
index 946b6b7..9b52c7d 100644
--- a/package.json
+++ b/package.json
@@ -200,11 +200,6 @@
           "default": true,
           "description": "Enable/disable suggest paths in import statement and require calls"
         },
-        "typescript.suggest.commaAfterImport": {
-          "type": "boolean",
-          "default": true,
-          "description": "Add comma after import statement."
-        },
         "typescript.suggest.autoImports": {
           "type": "boolean",
           "default": true,
@@ -316,11 +311,6 @@
           "default": true,
           "description": "Enable/disable suggest paths in import statement and require calls"
         },
-        "javascript.suggest.commaAfterImport": {
-          "type": "boolean",
-          "default": true,
-          "description": "Add comma after import statement."
-        },
         "javascript.suggest.autoImports": {
           "type": "boolean",
           "default": true,
@@ -407,3 +397,4 @@
     "which": "^1.3.1"
   }
 }
+
diff --git a/src/server/features/completionItemProvider.ts b/src/server/features/completionItemProvider.ts
index e446194..0f983d2 100644
--- a/src/server/features/completionItemProvider.ts
+++ b/src/server/features/completionItemProvider.ts
@@ -51,6 +51,7 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
 
   public static readonly triggerCharacters = ['.', '@', '<']
   private completeOption: SuggestOptions
+  private noSemicolons = false
 
   constructor(
     private readonly client: ITypeScriptServiceClient,
@@ -61,10 +62,14 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
 
     this.setCompleteOption(languageId)
     commands.register(new ApplyCompletionCodeActionCommand(this.client))
+    workspace.onDidChangeConfiguration(_e => {
+      this.setCompleteOption(languageId)
+    })
   }
 
   private setCompleteOption(languageId: string): void {
     this.completeOption = this.fileConfigurationManager.getCompleteOptions(languageId)
+    this.noSemicolons = this.fileConfigurationManager.removeSemicolons(languageId)
   }
 
   /**
@@ -218,7 +223,6 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
     if (!detail.codeActions || !detail.codeActions.length) {
       return {}
     }
-    let { commaAfterImport } = this.completeOption
     // Try to extract out the additionalTextEdits for the current file.
     // Also check if we still have to apply other workspace edits
     const additionalTextEdits: TextEdit[] = []
@@ -257,10 +261,10 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
         ]
       }
     }
-    if (additionalTextEdits.length && !commaAfterImport) {
+    if (additionalTextEdits.length && this.noSemicolons) {
       // remove comma
       additionalTextEdits.forEach(o => {
-        o.newText = o.newText.replace(/;/, '')
+        o.newText = o.newText.replace(/;/g, '')
       })
     }
     return {
diff --git a/src/server/features/fileConfigurationManager.ts b/src/server/features/fileConfigurationManager.ts
index 2685c8c..23a189e 100644
--- a/src/server/features/fileConfigurationManager.ts
+++ b/src/server/features/fileConfigurationManager.ts
@@ -34,7 +34,6 @@ export interface SuggestOptions {
   readonly enabled: boolean
   readonly names: boolean
   readonly paths: boolean
-  readonly commaAfterImport: boolean
   readonly completeFunctionCalls: boolean
   readonly autoImports: boolean
 }
@@ -129,7 +128,6 @@ export default class FileConfigurationManager {
       enabled: config.get<boolean>('enabled', true),
       names: config.get<boolean>('names', true),
       paths: config.get<boolean>('paths', true),
-      commaAfterImport: config.get<boolean>('commaAfterImport', true),
       completeFunctionCalls: config.get<boolean>('completeFunctionCalls', true),
       autoImports: config.get<boolean>('autoImports', true)
     }
diff --git a/src/server/features/organizeImports.ts b/src/server/features/organizeImports.ts
index 0e4568d..5a7fcab 100644
--- a/src/server/features/organizeImports.ts
+++ b/src/server/features/organizeImports.ts
@@ -16,7 +16,7 @@ class OrganizeImportsCommand implements Command {
 
   constructor(
     private readonly client: ITypeScriptServiceClient,
-    private commaAfterImport: boolean,
+    private noSemicolons: boolean,
     private modeIds: string[]
   ) {
     workspace.onWillSaveUntil(this.onWillSaveUntil, this, 'tsserver-organizeImports')
@@ -55,7 +55,7 @@ class OrganizeImportsCommand implements Command {
       this.client,
       response.body
     )
-    if (!this.commaAfterImport) {
+    if (this.noSemicolons) {
       let { changes } = edit
       if (changes) {
         for (let c of Object.keys(changes)) {
@@ -87,8 +87,8 @@ export default class OrganizeImports {
   ) {
     let description = standardLanguageDescriptions.find(o => o.id == languageId)
     let modeIds = description ? description.modeIds : []
-    let option = fileConfigurationManager.getCompleteOptions(languageId)
-    let cmd = new OrganizeImportsCommand(client, option.commaAfterImport, modeIds)
+    let noSemicolons = fileConfigurationManager.removeSemicolons(languageId)
+    let cmd = new OrganizeImportsCommand(client, noSemicolons, modeIds)
     commandManager.register(cmd)
     this.disposables.push(Disposable.create(() => {
       commandManager.unregister(cmd.id)