[cm6] Improve symbol completion ranking (#12902)

GitOrigin-RevId: 8ccc87c2b86636bd37a3472d36873ade9a190209
This commit is contained in:
Alf Eaton 2023-05-05 09:39:49 +01:00 committed by Copybot
parent 009a108c71
commit b1929cf16d
6 changed files with 26 additions and 30 deletions

16
package-lock.json generated
View file

@ -3145,9 +3145,9 @@
"dev": true "dev": true
}, },
"node_modules/@codemirror/autocomplete": { "node_modules/@codemirror/autocomplete": {
"version": "6.6.0", "version": "6.6.1",
"resolved": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#cd13c2c15a6f89b207f7cc4523e38fd5ef0efc47", "resolved": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"integrity": "sha512-Uf8Tv/wLUmPyxTwxrp/+t+f5sognQs+qHyQ+AvCFhS1wWa2Tw9+Ko/84EsPXQpYwTgN8xvejBCSHlRzubogHLA==", "integrity": "sha512-3xD9M0e5cw0XsC7mMfRy+vKcOup7Nno4J3r0aTvwWqsUlQYBzT0R3sBEn6y+gHdpIpuSEx+jKIGKiqBsWI8czg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@codemirror/language": "^6.0.0", "@codemirror/language": "^6.0.0",
@ -35165,7 +35165,7 @@
"@babel/preset-env": "^7.14.5", "@babel/preset-env": "^7.14.5",
"@babel/preset-react": "^7.14.5", "@babel/preset-react": "^7.14.5",
"@babel/preset-typescript": "^7.16.0", "@babel/preset-typescript": "^7.16.0",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#cd13c2c15a6f89b207f7cc4523e38fd5ef0efc47", "@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"@codemirror/commands": "^6.2.3", "@codemirror/commands": "^6.2.3",
"@codemirror/lang-markdown": "^6.1.1", "@codemirror/lang-markdown": "^6.1.1",
"@codemirror/language": "^6.6.0", "@codemirror/language": "^6.6.0",
@ -39926,9 +39926,9 @@
"dev": true "dev": true
}, },
"@codemirror/autocomplete": { "@codemirror/autocomplete": {
"version": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#cd13c2c15a6f89b207f7cc4523e38fd5ef0efc47", "version": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"integrity": "sha512-Uf8Tv/wLUmPyxTwxrp/+t+f5sognQs+qHyQ+AvCFhS1wWa2Tw9+Ko/84EsPXQpYwTgN8xvejBCSHlRzubogHLA==", "integrity": "sha512-3xD9M0e5cw0XsC7mMfRy+vKcOup7Nno4J3r0aTvwWqsUlQYBzT0R3sBEn6y+gHdpIpuSEx+jKIGKiqBsWI8czg==",
"from": "@codemirror/autocomplete@github:overleaf/codemirror-autocomplete#cd13c2c15a6f89b207f7cc4523e38fd5ef0efc47", "from": "@codemirror/autocomplete@github:overleaf/codemirror-autocomplete#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"requires": { "requires": {
"@codemirror/language": "^6.0.0", "@codemirror/language": "^6.0.0",
"@codemirror/state": "^6.0.0", "@codemirror/state": "^6.0.0",
@ -44845,7 +44845,7 @@
"@babel/preset-react": "^7.14.5", "@babel/preset-react": "^7.14.5",
"@babel/preset-typescript": "^7.16.0", "@babel/preset-typescript": "^7.16.0",
"@babel/register": "^7.14.5", "@babel/register": "^7.14.5",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#cd13c2c15a6f89b207f7cc4523e38fd5ef0efc47", "@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"@codemirror/commands": "^6.2.3", "@codemirror/commands": "^6.2.3",
"@codemirror/lang-markdown": "^6.1.1", "@codemirror/lang-markdown": "^6.1.1",
"@codemirror/language": "^6.6.0", "@codemirror/language": "^6.6.0",

View file

@ -338,16 +338,6 @@ const commandCompletionSource = (context: CompletionContext) => {
buildAllCompletions(completions, context) buildAllCompletions(completions, context)
// ensure that there's only one completion for each label
const uniqueCommandCompletions = Array.from(
new Map(
[
...completions.commands,
...customCommandCompletions(context, completions.commands),
].map(completion => [completion.label, completion])
).values()
)
// Unknown commands // Unknown commands
const prefixMatcher = /^\\[^{\s]*$/ const prefixMatcher = /^\\[^{\s]*$/
const prefixMatch = matchBefore.text.match(prefixMatcher) const prefixMatch = matchBefore.text.match(prefixMatcher)
@ -356,7 +346,8 @@ const commandCompletionSource = (context: CompletionContext) => {
from: matchBefore.from, from: matchBefore.from,
validFor: prefixMatcher, validFor: prefixMatcher,
options: [ options: [
...uniqueCommandCompletions, ...completions.commands,
...customCommandCompletions(context, completions.commands),
...customEnvironmentCompletions(context), ...customEnvironmentCompletions(context),
], ],
} }
@ -365,7 +356,10 @@ const commandCompletionSource = (context: CompletionContext) => {
// anything else (no validFor) // anything else (no validFor)
return { return {
from: matchBefore.to, from: matchBefore.to,
options: uniqueCommandCompletions, options: [
...completions.commands,
...customCommandCompletions(context, completions.commands),
],
} }
} }

View file

@ -25,7 +25,7 @@ export function customCommandCompletions(
output.push({ output.push({
type: 'cmd', type: 'cmd',
label: item.label, label: item.label,
boost: item.count - 10, boost: Math.max(0, item.count - 10),
apply: applySnippet(item.snippet), apply: applySnippet(item.snippet),
extend: extendOverUnpairedClosingBrace, extend: extendOverUnpairedClosingBrace,
}) })

View file

@ -12,7 +12,8 @@ export function buildSnippetCompletions(completions: Completions) {
type: item.meta, type: item.meta,
label: item.caption, label: item.caption,
boost: item.score, boost: item.score,
apply: applySnippet(item.snippet), apply:
item.snippet === item.caption ? undefined : applySnippet(item.snippet),
extend: extendOverUnpairedClosingBrace, extend: extendOverUnpairedClosingBrace,
}) })
} }

View file

@ -16,13 +16,14 @@ import { documentOutline } from './document-outline'
import { LaTeXLanguage } from './latex-language' import { LaTeXLanguage } from './latex-language'
import { documentEnvironmentNames } from './document-environment-names' import { documentEnvironmentNames } from './document-environment-names'
const completionSources = importOverleafModules('sourceEditorCompletionSources') const completionSources: CompletionSource[] = [
.map((item: any) => item.import.default) ...argumentCompletionSources,
.concat( inCommandCompletionSource,
argumentCompletionSources, explicitCommandCompletionSource,
inCommandCompletionSource, ...importOverleafModules('sourceEditorCompletionSources').map(
explicitCommandCompletionSource (item: any) => item.import.default
) as CompletionSource[] ),
]
export const latex = () => { export const latex = () => {
return new LanguageSupport(LaTeXLanguage, [ return new LanguageSupport(LaTeXLanguage, [

View file

@ -71,7 +71,7 @@
"@babel/preset-env": "^7.14.5", "@babel/preset-env": "^7.14.5",
"@babel/preset-react": "^7.14.5", "@babel/preset-react": "^7.14.5",
"@babel/preset-typescript": "^7.16.0", "@babel/preset-typescript": "^7.16.0",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#cd13c2c15a6f89b207f7cc4523e38fd5ef0efc47", "@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"@codemirror/commands": "^6.2.3", "@codemirror/commands": "^6.2.3",
"@codemirror/lang-markdown": "^6.1.1", "@codemirror/lang-markdown": "^6.1.1",
"@codemirror/language": "^6.6.0", "@codemirror/language": "^6.6.0",