From 317916f2b7949b212db8bedfbbd722d6c14f060d Mon Sep 17 00:00:00 2001 From: Benjamin Albrecht Date: Fri, 13 Dec 2024 17:53:43 +0100 Subject: [PATCH] feat(language-server): add support for kebab-case completion --- .../Contextive.LanguageServer.Tests/CompletionTests.fs | 2 ++ .../Helpers/Fixtures.fs | 10 ++++++++-- .../Contextive.LanguageServer/Completion.fs | 10 +++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/language-server/Contextive.LanguageServer.Tests/CompletionTests.fs b/src/language-server/Contextive.LanguageServer.Tests/CompletionTests.fs index 2172f022..e82ac9e8 100644 --- a/src/language-server/Contextive.LanguageServer.Tests/CompletionTests.fs +++ b/src/language-server/Contextive.LanguageServer.Tests/CompletionTests.fs @@ -102,6 +102,7 @@ let tests = "multiWord" "MultiWord" "multi_word" + "multi-word" }) ("Multi Word", Some "m", @@ -127,6 +128,7 @@ let tests = "multiWord" "MultiWord" "multi_word" + "multi-word" }) ("multi word", Some "m", diff --git a/src/language-server/Contextive.LanguageServer.Tests/Helpers/Fixtures.fs b/src/language-server/Contextive.LanguageServer.Tests/Helpers/Fixtures.fs index f65ff065..c667c64a 100644 --- a/src/language-server/Contextive.LanguageServer.Tests/Helpers/Fixtures.fs +++ b/src/language-server/Contextive.LanguageServer.Tests/Helpers/Fixtures.fs @@ -8,12 +8,15 @@ module One = [ "firstTerm" "FirstTerm" "first_term" + "first-term" "secondTerm" "SecondTerm" "second_term" + "second-term" "thirdTerm" "ThirdTerm" - "third_term" ] + "third_term" + "third-term" ] module Two = let expectedCompletionLabels = @@ -21,12 +24,15 @@ module Two = [ "word1" "Word1" "word_1" + "word-1" "word2" "Word2" "word_2" + "word-2" "word3" "Word3" - "word_3" ] + "word_3" + "word-3" ] let expectedCompletionLabelsPascal = seq [ "Word1"; "WORD_1"; "Word2"; "WORD_2"; "Word3"; "WORD_3" ] diff --git a/src/language-server/Contextive.LanguageServer/Completion.fs b/src/language-server/Contextive.LanguageServer/Completion.fs index 3e4a8e41..2e565649 100644 --- a/src/language-server/Contextive.LanguageServer/Completion.fs +++ b/src/language-server/Contextive.LanguageServer/Completion.fs @@ -67,6 +67,12 @@ let private (|UpperCase|_|) (ct: string) = else None +let private (|KebabCase|_|) (ct: string) = + if ct.Contains("-") && ct.ToLower() = ct then + Some() + else + None + let private termFilter = id let private upper (s: string) = s.ToUpper() @@ -117,13 +123,15 @@ let private candidateTermsToCaseMatchedCompletionData let upperCase = ("", upper, upper) let camelCase = ("", lower, title) let pascalCase = ("", title, title) + let kebabCase = ("-", lower, lower) let tokenCombinationGenerator = match caseTemplate with | Some(UpperCase) -> candidateTerms |> tokenCombinations [ upperCase; upperSnakeCase ] | Some(PascalCase) -> candidateTerms |> tokenCombinations [ pascalCase; upperSnakeCase ] | Some(CamelCase) -> candidateTerms |> tokenCombinations [ camelCase; snakeCase ] - | _ -> candidateTerms |> tokenCombinations [ camelCase; pascalCase; snakeCase ] + | Some(KebabCase) -> candidateTerms |> tokenCombinations [ kebabCase; snakeCase ] + | _ -> candidateTerms |> tokenCombinations [ camelCase; pascalCase; snakeCase; kebabCase ] tokenCombinationGenerator term