Skip to content

Commit 11c329f

Browse files
authored
Merge pull request #136 from atom-community/auto-languageclient-features
2 parents dfcd4e5 + 07cbfe9 commit 11c329f

File tree

3 files changed

+56
-3
lines changed

3 files changed

+56
-3
lines changed

lib/adapters/autocomplete-adapter.ts

+10
Original file line numberDiff line numberDiff line change
@@ -558,3 +558,13 @@ export default class AutocompleteAdapter {
558558
}
559559
}
560560
}
561+
562+
/**
563+
* Normalizes the given grammar scope for autoComplete package so it always starts with `.`
564+
* Based on https://github.com/atom/autocomplete-plus/wiki/Autocomplete-Providers
565+
* @param grammarScope such as 'source.python' or '.source.python'
566+
* @returns the normalized grammarScope such as `.source.python`
567+
*/
568+
export function grammarScopeToAutoCompleteSelector(grammarScope: string): string {
569+
return grammarScope.includes(".") && grammarScope[0] !== "." ? `.${grammarScope}` : grammarScope
570+
}

lib/auto-languageclient.ts

+33-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as atomIde from "atom-ide"
77
import * as linter from "atom/linter"
88
import Convert from "./convert.js"
99
import ApplyEditAdapter from "./adapters/apply-edit-adapter"
10-
import AutocompleteAdapter from "./adapters/autocomplete-adapter"
10+
import AutocompleteAdapter, { grammarScopeToAutoCompleteSelector } from "./adapters/autocomplete-adapter"
1111
import CodeActionAdapter from "./adapters/code-action-adapter"
1212
import CodeFormatAdapter from "./adapters/code-format-adapter"
1313
import CodeHighlightAdapter from "./adapters/code-highlight-adapter"
@@ -158,6 +158,22 @@ export default class AutoLanguageClient {
158158
completionItem: {
159159
snippetSupport: true,
160160
commitCharactersSupport: false,
161+
documentationFormat: [],
162+
deprecatedSupport: false,
163+
preselectSupport: false,
164+
tagSupport: {
165+
valueSet: [],
166+
},
167+
insertReplaceSupport: false,
168+
resolveSupport: {
169+
properties: [],
170+
},
171+
insertTextModeSupport: {
172+
valueSet: [],
173+
},
174+
},
175+
completionItemKind: {
176+
valueSet: [],
161177
},
162178
contextSupport: true,
163179
},
@@ -548,14 +564,29 @@ export default class AutoLanguageClient {
548564
}
549565

550566
// Autocomplete+ via LS completion---------------------------------------
567+
568+
/**
569+
* A method to override to return an array of grammar scopes that should not be used for autocompletion.
570+
*
571+
* Usually that's used for disabling autocomplete inside comments,
572+
* @example if the grammar scopes are [ '.source.js' ], `getAutocompleteDisabledScopes` may return [ '.source.js .comment' ].
573+
*/
574+
protected getAutocompleteDisabledScopes(): Array<string> {
575+
return []
576+
}
577+
551578
public provideAutocomplete(): ac.AutocompleteProvider {
552579
return {
553580
selector: this.getGrammarScopes()
554-
.map((g) => (g.includes(".") ? "." + g : g))
581+
.map((g) => grammarScopeToAutoCompleteSelector(g))
582+
.join(", "),
583+
disableForSelector: this.getAutocompleteDisabledScopes()
584+
.map((g) => grammarScopeToAutoCompleteSelector(g))
555585
.join(", "),
556586
inclusionPriority: 1,
557587
suggestionPriority: 2,
558588
excludeLowerPriority: false,
589+
filterSuggestions: true,
559590
getSuggestions: this.getSuggestions.bind(this),
560591
onDidInsertSuggestion: this.onDidInsertSuggestion.bind(this),
561592
getSuggestionDetailsOnSelect: this.getSuggestionDetailsOnSelect.bind(this),

test/adapters/autocomplete-adapter.test.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import AutoCompleteAdapter from "../../lib/adapters/autocomplete-adapter"
1+
import AutoCompleteAdapter, { grammarScopeToAutoCompleteSelector } from "../../lib/adapters/autocomplete-adapter"
22
import { ActiveServer } from "../../lib/server-manager.js"
33
import * as ls from "../../lib/languageclient"
44
import * as sinon from "sinon"
@@ -807,4 +807,16 @@ describe("AutoCompleteAdapter", () => {
807807
expect(result).equals("value")
808808
})
809809
})
810+
811+
describe("grammarScopeToAutoCompleteSelector", () => {
812+
it("prepends dot to the begining of the grammarScope", () => {
813+
expect(grammarScopeToAutoCompleteSelector("source.python")).equal(".source.python")
814+
})
815+
it("doesn't prepend dot if it already has", () => {
816+
expect(grammarScopeToAutoCompleteSelector(".source.python")).equal(".source.python")
817+
})
818+
it("doesn't prepend dot if the scope doesn't have dot in it", () => {
819+
expect(grammarScopeToAutoCompleteSelector("javascript")).equal("javascript")
820+
})
821+
})
810822
})

0 commit comments

Comments
 (0)