diff --git a/basis/tools/completion/completion-tests.factor b/basis/tools/completion/completion-tests.factor index 39a7bc8b62..ad37c290a7 100644 --- a/basis/tools/completion/completion-tests.factor +++ b/basis/tools/completion/completion-tests.factor @@ -1,13 +1,11 @@ - -USING: assocs kernel tools.completion tools.completion.private -tools.test ; +USING: arrays assocs kernel sequences tools.test ; IN: tools.completion { f } [ "abc" "def" fuzzy ] unit-test { V{ 4 5 6 } } [ "set-nth" "nth" fuzzy ] unit-test -{ V{ V{ 0 } V{ 4 5 6 } } } [ V{ 0 4 5 6 } runs ] unit-test +{ { { 0 } { 4 5 6 } } } [ V{ 0 4 5 6 } runs [ >array ] map ] unit-test { { "nth" "?nth" "set-nth" } } [ "nth" { "set-nth" "nth" "?nth" } dup zip completions keys diff --git a/basis/tools/completion/completion.factor b/basis/tools/completion/completion.factor index 58bf1d4156..8c53878ae3 100644 --- a/basis/tools/completion/completion.factor +++ b/basis/tools/completion/completion.factor @@ -2,10 +2,10 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays assocs colors.constants combinators combinators.short-circuit fry io.directories io.files -io.files.info io.files.types io.pathnames kernel locals make -math math.order sequences sequences.private sorting splitting -unicode.categories unicode.data vectors vocabs vocabs.hierarchy -; +io.files.info io.pathnames kernel locals make math math.order +sequences sequences.private sorting splitting +splitting.monotonic unicode.categories unicode.data vectors +vocabs vocabs.hierarchy ; IN: tools.completion <PRIVATE @@ -28,21 +28,8 @@ PRIVATE> dup [ length <vector> 0 ] curry 2dip [ (fuzzy) ] with all? 2drop ; -<PRIVATE - -: (runs) ( runs n seq -- runs n ) - [ - [ - 2dup number= - [ drop ] [ nip V{ } clone pick push ] if - 1 + - ] keep pick last push - ] each ; inline - -PRIVATE> - : runs ( seq -- newseq ) - [ V{ } clone 1vector ] dip [ first ] keep (runs) drop ; + [ 1 - = ] monotonic-split-slice ; <PRIVATE @@ -69,15 +56,12 @@ PRIVATE> ] if ; : rank-completions ( results -- newresults ) - sort-keys <reversed> [ 0 [ first max ] reduce 3 /f ] keep [ first-unsafe < ] with filter - values ; + sort-keys <reversed> values ; : complete ( full short -- score ) - [ dupd fuzzy score ] 2keep - [ <reversed> ] bi@ - dupd fuzzy score max ; + 2dup [ <reversed> ] bi@ [ dupd fuzzy score ] 2bi@ max ; : completion ( short candidate -- result ) [ second swap complete ] keep 2array ; inline