From eaf8e1831aa33918d777205f9d6171effac712bc Mon Sep 17 00:00:00 2001 From: Benjamin Gray Date: Wed, 28 Nov 2018 23:41:47 +1100 Subject: [PATCH 1/4] Recognise minimum prefix length --- lib/autocomplete-snippets.js | 20 +++++++++++++++++++- lib/snippets-provider.js | 5 ++++- package.json | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/lib/autocomplete-snippets.js b/lib/autocomplete-snippets.js index ca5bc3f..5ddf072 100644 --- a/lib/autocomplete-snippets.js +++ b/lib/autocomplete-snippets.js @@ -1,10 +1,28 @@ +const {CompositeDisposable} = require('atom') + module.exports = { + subscriptions: null, provider: null, - activate() {}, + activate() { + this.subscriptions = new CompositeDisposable() + this.subscriptions.add(atom.config.observe('autocomplete-snippets.useAutocompletePlusMinimumWordLength', (value) => { + if (!this.provider) return + if (value) { + this.provider.minPrefixLength = atom.config.get('autocomplete-plus.minimumWordLength') + } else { + this.provider.minPrefixLength = atom.config.get('autocomplete-snippets.minimumWordLength') + } + })) + this.subscriptions.add(atom.config.observe('autocomplete-snippets.minimumWordLength', (value) => { + if (!this.provider || atom.config.get('autocomplete-snippets.useAutocompletePlusMinimumWordLength')) return + this.provider.minPrefixLength = value + })) + }, deactivate() { this.provider = null + this.subscriptions.dispose() }, provide() { diff --git a/lib/snippets-provider.js b/lib/snippets-provider.js index 2b73e22..eae796b 100644 --- a/lib/snippets-provider.js +++ b/lib/snippets-provider.js @@ -5,6 +5,9 @@ class SnippetsProvider { this.inclusionPriority = 1 this.suggestionPriority = 2 this.filterSuggestions = true + this.minPrefixLength = atom.config.get('autocomplete-snippets.useAutocompletePlusMinimumWordLength') ? + atom.config.get('autocomplete-plus.minimumWordLength') : + atom.config.get('autocomplete-snippets.minimumWordLength') this.showIcon = ['Symbol', 'Subsequence'].includes(atom.config.get('autocomplete-plus.defaultProvider')) this.snippetsSource = { @@ -21,7 +24,7 @@ class SnippetsProvider { } getSuggestions({scopeDescriptor, prefix}) { - if (!(prefix != null ? prefix.length : undefined)) { return } + if (prefix == null || prefix.length < this.minPrefixLength) { return } const scopeSnippets = this.snippetsSource.snippetsForScopes(scopeDescriptor) return this.findSuggestionsForPrefix(scopeSnippets, prefix) } diff --git a/package.json b/package.json index e1fcd50..c04b406 100644 --- a/package.json +++ b/package.json @@ -25,5 +25,19 @@ "0.1.0": "consumeSnippets" } } + }, + "configSchema": { + "useAutocompletePlusMinimumWordLength": { + "description": "When enabled, the minimum prefix length will be that set for autocomplete-plus", + "type": "boolean", + "default": true, + "order": 1 + }, + "minimumWordLength": { + "description": "Minimum prefix length when not using the one set for autocomplete-plus", + "type": "integer", + "default": 3, + "order": 2 + } } } From 3ef6880d1eccb3124ca80ee6da0dc989c0a955ee Mon Sep 17 00:00:00 2001 From: Benjamin Gray Date: Wed, 28 Nov 2018 23:50:33 +1100 Subject: [PATCH 2/4] Set min length in test --- spec/autocomplete-snippets-spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/autocomplete-snippets-spec.js b/spec/autocomplete-snippets-spec.js index 16d3ad7..588c32e 100644 --- a/spec/autocomplete-snippets-spec.js +++ b/spec/autocomplete-snippets-spec.js @@ -94,6 +94,7 @@ describe('AutocompleteSnippets', () => { const SnippetsProvider = require('../lib/snippets-provider') const sp = new SnippetsProvider() + sp.minPrefixLength = 1 sp.setSnippetsSource({snippetsForScopes(scope) { return snippets }}) From 309205ba5ce1075769a8d4f26d14abe4a16c6e36 Mon Sep 17 00:00:00 2001 From: Benjamin Gray Date: Thu, 29 Nov 2018 16:06:05 +1000 Subject: [PATCH 3/4] Tests & observe aPlus minPrefLength changes --- lib/autocomplete-snippets.js | 4 ++++ spec/autocomplete-snippets-spec.js | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/autocomplete-snippets.js b/lib/autocomplete-snippets.js index 5ddf072..88b1977 100644 --- a/lib/autocomplete-snippets.js +++ b/lib/autocomplete-snippets.js @@ -18,6 +18,10 @@ module.exports = { if (!this.provider || atom.config.get('autocomplete-snippets.useAutocompletePlusMinimumWordLength')) return this.provider.minPrefixLength = value })) + this.subscriptions.add(atom.config.observe('autocomplete-plus.minimumWordLength', (value) => { + if (!this.provider || !atom.config.get('autocomplete-snippets.useAutocompletePlusMinimumWordLength')) return + this.provider.minPrefixLength = value + })) }, deactivate() { diff --git a/spec/autocomplete-snippets-spec.js b/spec/autocomplete-snippets-spec.js index 588c32e..3270e6f 100644 --- a/spec/autocomplete-snippets-spec.js +++ b/spec/autocomplete-snippets-spec.js @@ -75,6 +75,30 @@ describe('AutocompleteSnippets', () => { expect(editor.getText()).toContain('} while (true)') }) }) + + describe('when picking minimum prefix length', () => { + it('respects the value set for autocomplete-plus', () => { + const plus = atom.config.get('autocomplete-plus.minimumWordLength') + atom.config.set('autocomplete-snippets.minimumWordLength', plus + 1) + + const SnippetsProvider = require('../lib/snippets-provider') + const usedVal = (new SnippetsProvider()).minPrefixLength + + expect(usedVal === plus) + }) + + it('can be overridden by its own setting', () => { + const plus = atom.config.get('autocomplete-plus.minimumWordLength') + atom.config.set('autocomplete-snippets.minimumWordLength', plus + 1) + const snippet = atom.config.get('autocomplete-snippets.minimumWordLength') + atom.config.set('autocomplete-snippets.useAutocompletePlusMinimumWordLength', false) + + const SnippetsProvider = require('../lib/snippets-provider') + const usedVal = (new SnippetsProvider()).minPrefixLength + + expect(usedVal === snippet) + }) + }) }) describe('when showing suggestions', () => From bf71c54f3011d44c6b82c809a78a2aa5ad337ea7 Mon Sep 17 00:00:00 2001 From: Benjamin Gray Date: Thu, 29 Nov 2018 16:42:41 +1000 Subject: [PATCH 4/4] Fix tests --- spec/autocomplete-snippets-spec.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/spec/autocomplete-snippets-spec.js b/spec/autocomplete-snippets-spec.js index 3270e6f..d67eb4a 100644 --- a/spec/autocomplete-snippets-spec.js +++ b/spec/autocomplete-snippets-spec.js @@ -2,6 +2,9 @@ describe('AutocompleteSnippets', () => { let [completionDelay, editor, editorView] = [] beforeEach(() => { + atom.config.set('autocomplete-snippets.minimumWordLength', 1) + atom.config.set('autocomplete-snippets.useAutocompletePlusMinimumWordLength', false) + atom.config.set('autocomplete-plus.enableAutoActivation', true) completionDelay = 100 atom.config.set('autocomplete-plus.autoActivationDelay', completionDelay) @@ -49,6 +52,7 @@ describe('AutocompleteSnippets', () => { advanceClock(completionDelay) }) + waitsFor('autocomplete view to appear', 1000, () => editorView.querySelector('.autocomplete-plus span.word')) runs(() => { @@ -78,25 +82,26 @@ describe('AutocompleteSnippets', () => { describe('when picking minimum prefix length', () => { it('respects the value set for autocomplete-plus', () => { + atom.config.set('autocomplete-snippets.useAutocompletePlusMinimumWordLength', true) + const plus = atom.config.get('autocomplete-plus.minimumWordLength') - atom.config.set('autocomplete-snippets.minimumWordLength', plus + 1) const SnippetsProvider = require('../lib/snippets-provider') const usedVal = (new SnippetsProvider()).minPrefixLength - expect(usedVal === plus) + expect(usedVal).toEqual(plus) }) it('can be overridden by its own setting', () => { + atom.config.set('autocomplete-snippets.useAutocompletePlusMinimumWordLength', false) const plus = atom.config.get('autocomplete-plus.minimumWordLength') atom.config.set('autocomplete-snippets.minimumWordLength', plus + 1) const snippet = atom.config.get('autocomplete-snippets.minimumWordLength') - atom.config.set('autocomplete-snippets.useAutocompletePlusMinimumWordLength', false) const SnippetsProvider = require('../lib/snippets-provider') const usedVal = (new SnippetsProvider()).minPrefixLength - expect(usedVal === snippet) + expect(usedVal).toEqual(snippet) }) }) })