From 7c8acdc956b163bb00a802acbc1cd56736b858dc Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Thu, 26 Oct 2023 15:27:48 -0700 Subject: [PATCH] Stop autocomplete from jumping around --- Makefile | 5 ++++- src-web/components/Sidebar.tsx | 2 -- src-web/components/core/Editor/genericCompletion.ts | 12 +++++++++--- src-web/components/core/Editor/twig/completion.ts | 8 +++++--- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 51959a2d..c656c66b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,7 @@ -.PHONY: sqlx-prepare +.PHONY: sqlx-prepare, dev sqlx-prepare: cd src-tauri && cargo sqlx prepare --database-url 'sqlite://db.sqlite' + +dev: + npm run tauri-dev diff --git a/src-web/components/Sidebar.tsx b/src-web/components/Sidebar.tsx index bc71621a..7dbb880c 100644 --- a/src-web/components/Sidebar.tsx +++ b/src-web/components/Sidebar.tsx @@ -23,8 +23,6 @@ import { useActiveEnvironmentId } from '../hooks/useActiveEnvironmentId'; import { WorkspaceActionsDropdown } from './WorkspaceActionsDropdown'; import { IconButton } from './core/IconButton'; import { useCreateRequest } from '../hooks/useCreateRequest'; -import { appWindow } from '@tauri-apps/api/window'; -import { invoke } from '@tauri-apps/api'; interface Props { className?: string; diff --git a/src-web/components/core/Editor/genericCompletion.ts b/src-web/components/core/Editor/genericCompletion.ts index 487e6283..7753fc7c 100644 --- a/src-web/components/core/Editor/genericCompletion.ts +++ b/src-web/components/core/Editor/genericCompletion.ts @@ -17,13 +17,19 @@ export interface GenericCompletionConfig { export function genericCompletion({ options, minMatch = 1 }: GenericCompletionConfig) { return function completions(context: CompletionContext) { - const toMatch = context.matchBefore(/^.*/); - if (toMatch === null) return null; + const toMatch = context.matchBefore(/\w*/); + + // Only match if we're at the start of the line + if (toMatch === null || toMatch.from > 0) return null; const matchedMinimumLength = toMatch.to - toMatch.from >= minMatch; if (!matchedMinimumLength && !context.explicit) return null; const optionsWithoutExactMatches = options.filter((o) => o.label !== toMatch.text); - return { from: toMatch.from, options: optionsWithoutExactMatches, info: 'hello', }; + return { + validFor: () => true, // Not really sure why this is all it needs + from: toMatch.from, + options: optionsWithoutExactMatches, + }; }; } diff --git a/src-web/components/core/Editor/twig/completion.ts b/src-web/components/core/Editor/twig/completion.ts index 3ac457a5..4558674b 100644 --- a/src-web/components/core/Editor/twig/completion.ts +++ b/src-web/components/core/Editor/twig/completion.ts @@ -1,4 +1,5 @@ import type { CompletionContext } from '@codemirror/autocomplete'; +import { w } from '@tauri-apps/api/clipboard-79413165'; const openTag = '${[ '; const closeTag = ' ]}'; @@ -12,7 +13,7 @@ export interface TwigCompletionConfig { } const MIN_MATCH_VAR = 2; -const MIN_MATCH_NAME = 3; +const MIN_MATCH_NAME = 1; export function twigCompletion({ options }: TwigCompletionConfig) { return function completions(context: CompletionContext) { @@ -37,16 +38,17 @@ export function twigCompletion({ options }: TwigCompletionConfig) { // TODO: Figure out how to make autocomplete stay open if opened explicitly. It sucks when you explicitly // open it, then it closes when you type the next character. return { + validFor: () => true, // Not really sure why this is all it needs from: toMatch.from, options: options .map((v) => ({ label: toStartOfVariable ? `${openTag}${v.name}${closeTag}` : v.name, apply: `${openTag}${v.name}${closeTag}`, type: 'variable', - matchLen, + matchLen: matchLen, })) // Filter out exact matches .filter((o) => o.label !== toMatch.text), }; - } + }; }