Skip to content

Commit 9f00426

Browse files
authored
Merge pull request JunoLab#713 from JunoLab/avi/fuzzycompletionmode
fuzzy completion mode
2 parents f290666 + b5aa683 commit 9f00426

File tree

3 files changed

+53
-24
lines changed

3 files changed

+53
-24
lines changed

lib/package/config.coffee

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,23 @@ config =
8383
type: 'string'
8484
default: ''
8585
order: 9
86+
fuzzyCompletionMode:
87+
title: 'Fuzzy Completion Mode'
88+
description:
89+
'''
90+
If `true`, in-editor auto-completions are generated based on fuzzy (i.e. more permissive) matches,
91+
otherwise based on strict matches as in REPL.
92+
***NOTE***: this setting doesn't affect completions in REPL,
93+
and so in-REPL completions will still work as usual (i.e. based on strict matches and will complete eagerly).
94+
'''
95+
type: 'boolean'
96+
default: true
97+
order: 10
8698
autoCompletionSuggestionPriority:
8799
title: 'Auto-Completion Suggestion Priority'
88100
description:
89101
'''
90-
Specify the sort order of Auto-completion suggestions provided by Juno.
102+
Specify the sort order of auto-completion suggestions provided by Juno.
91103
Note the default providers like snippets have priority of `1`.
92104
Requires Atom restart to take an effect.
93105
'''

lib/runtime.coffee

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
11
{ CompositeDisposable, Disposable } = require 'atom'
22

33
module.exports =
4-
modules: require './runtime/modules'
5-
evaluation: require './runtime/evaluation'
6-
console: require './runtime/console'
7-
workspace: require './runtime/workspace'
8-
plots: require './runtime/plots'
9-
frontend: require './runtime/frontend'
10-
debugger: require './runtime/debugger'
11-
profiler: require './runtime/profiler'
12-
outline: require './runtime/outline'
13-
linter: require './runtime/linter'
14-
packages: require './runtime/packages'
15-
debuginfo: require './runtime/debuginfo'
16-
formatter: require './runtime/formatter'
17-
goto: require './runtime/goto'
4+
modules: require './runtime/modules'
5+
evaluation: require './runtime/evaluation'
6+
console: require './runtime/console'
7+
completions: require './runtime/completions'
8+
workspace: require './runtime/workspace'
9+
plots: require './runtime/plots'
10+
frontend: require './runtime/frontend'
11+
debugger: require './runtime/debugger'
12+
profiler: require './runtime/profiler'
13+
outline: require './runtime/outline'
14+
linter: require './runtime/linter'
15+
packages: require './runtime/packages'
16+
debuginfo: require './runtime/debuginfo'
17+
formatter: require './runtime/formatter'
18+
goto: require './runtime/goto'
1819

1920
activate: ->
2021
@subs = new CompositeDisposable()
22+
2123
@modules.activate()
24+
@completions.activate()
2225
@frontend.activate()
23-
2426
@subs.add atom.config.observe 'julia-client.juliaOptions.formatOnSave', (val) =>
2527
if val
2628
@formatter.activate()
2729
else
2830
@formatter.deactivate()
2931

3032
@subs.add new Disposable(=>
31-
mod.deactivate() for mod in [@modules, @frontend, @formatter])
33+
mod.deactivate() for mod in [@modules, @completions, @frontend, @formatter])
3234

3335
deactivate: ->
3436
@subs.dispose()
@@ -44,8 +46,7 @@ module.exports =
4446
@subs.add new Disposable(=>
4547
mod.deactivate() for mod in [@console, @debugger, @profiler, @linter, @goto, @outline])
4648

47-
provideAutoComplete: ->
48-
require './runtime/completions'
49+
provideAutoComplete: -> @completions
4950

5051
provideHyperclick: -> @goto.provideHyperclick()
5152

lib/runtime/completions.js

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
* @TODO: Complete quotes for strings
66
*/
77

8-
import { Point, Range } from 'atom'
8+
import { CompositeDisposable, Point, Range } from 'atom'
99

1010
import { client } from '../connection'
1111
import modules from './modules'
1212

1313
import { getLocalContext } from '../misc/blocks'
1414

1515
const bracketScope = 'meta.bracket.julia'
16-
const completions = client.import('completions')
16+
const baselineCompletionAdapter = client.import('completions')
1717
const completionDetail = client.import('completiondetail')
1818

1919
class AutoCompleteProvider {
@@ -24,6 +24,22 @@ class AutoCompleteProvider {
2424
suggestionPriority = atom.config.get('julia-client.juliaOptions.autoCompletionSuggestionPriority')
2525
filterSuggestions = false
2626

27+
activate () {
28+
this.subscriptions = new CompositeDisposable()
29+
this.subscriptions.add(
30+
atom.config.observe('julia-client.juliaOptions.fuzzyCompletionMode', v => {
31+
this.fuzzyCompletionMode = v
32+
}),
33+
atom.config.observe('julia-client.juliaOptions.noAutoParenthesis', v => {
34+
this.noAutoParenthesis = v
35+
})
36+
)
37+
}
38+
39+
deactivate () {
40+
this.subscriptions.dispose()
41+
}
42+
2743
getSuggestions (data) {
2844
if (!client.isActive()) return []
2945
const { editor, bufferPosition, activatedManually } = data
@@ -57,8 +73,7 @@ class AutoCompleteProvider {
5773
baselineCompletions (data, line) {
5874
const { editor, bufferPosition: { row, column }, activatedManually } = data
5975
const { context, startRow } = getLocalContext(editor, row)
60-
61-
return completions({
76+
return baselineCompletionAdapter({
6277
// general
6378
line,
6479
path: editor.getPath(),
@@ -69,6 +84,7 @@ class AutoCompleteProvider {
6984
startRow,
7085
column: column + 1,
7186
// configurations
87+
is_fuzzy: this.fuzzyCompletionMode,
7288
force: activatedManually || false,
7389
}).then(completions => {
7490
return completions.map(completion => {
@@ -119,7 +135,7 @@ class AutoCompleteProvider {
119135
}
120136

121137
onDidInsertSuggestion ({ editor, suggestion: { type } }) {
122-
if (type !== 'function' || atom.config.get('julia-client.juliaOptions.noAutoParenthesis')) return
138+
if (type !== 'function' || this.noAutoParenthesis) return
123139
editor.mutateSelectedText(selection => {
124140
if (!selection.isEmpty()) return
125141
const { row, column } = selection.getBufferRange().start

0 commit comments

Comments
 (0)