Skip to content

Commit

Permalink
fix: find folding ranges function
Browse files Browse the repository at this point in the history
  • Loading branch information
sloorush committed Aug 12, 2022
1 parent a032c78 commit 892a129
Showing 1 changed file with 10 additions and 19 deletions.
29 changes: 10 additions & 19 deletions plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Ide.Plugin.CodeRange (
descriptor
Expand Down Expand Up @@ -86,7 +87,7 @@ getFoldingRanges :: NormalizedFilePath -> ExceptT String IdeAction [FoldingRange
getFoldingRanges file = do
(codeRange, _) <- maybeToExceptT "fail to get code range" $ useE GetCodeRange file

let foldingRanges = catMaybes $ findFoldingRanges codeRange
let foldingRanges = findFoldingRanges codeRange

maybeToExceptT "Fail to generate folding range" (MaybeT . pure $ Just foldingRanges)

Expand Down Expand Up @@ -148,24 +149,14 @@ findPosition pos root = go Nothing root
startOfRight <- _start . _codeRange_range <$> V.headM right
if pos < startOfRight then binarySearchPos left else binarySearchPos right

findFoldingRanges :: CodeRange -> [Maybe FoldingRange]
findFoldingRanges root = do
let acc = []
let node = _codeRange_children root
binarySearchFoldingRange node acc

binarySearchFoldingRange :: Vector CodeRange -> [Maybe FoldingRange] -> [Maybe FoldingRange]
binarySearchFoldingRange v acc
| V.null v = []
| V.length v == 1 = do
headOfCodeRange <- V.headM v
let foldingRangesOfRange = createFoldingRange headOfCodeRange
let acc' = acc ++ [foldingRangesOfRange]
acc'
| otherwise = do
let (left, right) = V.splitAt (V.length v `div` 2) v
_ <- binarySearchFoldingRange left acc
binarySearchFoldingRange right acc
findFoldingRanges :: CodeRange -> [FoldingRange]
findFoldingRanges r@(CodeRange _ children _) =
let frRoot :: [FoldingRange] = case createFoldingRange r of
Just x -> [x]
Nothing -> []

frChildren :: [FoldingRange] = concat $ V.toList $ fmap findFoldingRanges children
in frRoot ++ frChildren

createFoldingRange :: CodeRange -> Maybe FoldingRange
createFoldingRange node1 = do
Expand Down

0 comments on commit 892a129

Please sign in to comment.