diff --git a/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs b/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs index e97ce872410..22a2cb1df07 100644 --- a/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs +++ b/plugins/hls-code-range-plugin/src/Ide/Plugin/CodeRange.hs @@ -88,7 +88,8 @@ getFoldingRanges :: NormalizedFilePath -> ExceptT String IdeAction [FoldingRange getFoldingRanges file = do (codeRange, _) <- maybeToExceptT "fail to get code range" $ useE GetCodeRange file - pure $ findFoldingRanges codeRange + -- removing first node because it folds the entire file + pure $ removeFirstNode $ findFoldingRanges codeRange selectionRangeHandler :: IdeState -> PluginId -> SelectionRangeParams -> LspM c (Either ResponseError (List SelectionRange)) selectionRangeHandler ide _ SelectionRangeParams{..} = do @@ -179,9 +180,13 @@ createFoldingRange :: CodeRange -> Maybe FoldingRange createFoldingRange (CodeRange (Range (Position lineStart charStart) (Position lineEnd charEnd)) _ ck) = do -- Type conversion of codeRangeKind to FoldingRangeKind let frk = crkToFrk ck - Just (FoldingRange lineStart (Just charStart) lineEnd (Just charEnd) (Just frk)) +-- | Removes first node from folding ranges +removeFirstNode :: [FoldingRange] -> [FoldingRange] +removeFirstNode [] = [] +removeFirstNode (_:xs) = xs + -- | Likes 'toCurrentPosition', but works on 'SelectionRange' toCurrentSelectionRange :: PositionMapping -> SelectionRange -> Maybe SelectionRange toCurrentSelectionRange positionMapping SelectionRange{..} = do diff --git a/plugins/hls-code-range-plugin/test/testdata/folding-range/Function.golden.txt b/plugins/hls-code-range-plugin/test/testdata/folding-range/Function.golden.txt index 78314b9f455..b7af2a60a06 100644 --- a/plugins/hls-code-range-plugin/test/testdata/folding-range/Function.golden.txt +++ b/plugins/hls-code-range-plugin/test/testdata/folding-range/Function.golden.txt @@ -1,3 +1,4 @@ +((2, 16) : (2, 22)) : FoldingRangeRegion ((4, 0) : (7, 21)) : FoldingRangeRegion ((4, 0) : (4, 25)) : FoldingRangeRegion ((4, 0) : (4, 6)) : FoldingRangeRegion @@ -17,4 +18,24 @@ ((5, 24) : (5, 26)) : FoldingRangeRegion ((5, 27) : (5, 28)) : FoldingRangeRegion ((6, 16) : (6, 20)) : FoldingRangeRegion -((7, 16) : (7, 21)) : FoldingRangeRegion \ No newline at end of file +((7, 16) : (7, 21)) : FoldingRangeRegion +((9, 0) : (12, 20)) : FoldingRangeRegion +((9, 0) : (9, 24)) : FoldingRangeRegion +((9, 0) : (9, 5)) : FoldingRangeRegion +((9, 9) : (9, 24)) : FoldingRangeRegion +((9, 9) : (9, 16)) : FoldingRangeRegion +((9, 20) : (9, 24)) : FoldingRangeRegion +((10, 0) : (12, 20)) : FoldingRangeRegion +((10, 0) : (10, 5)) : FoldingRangeRegion +((10, 6) : (10, 7)) : FoldingRangeRegion +((10, 8) : (12, 20)) : FoldingRangeRegion +((10, 10) : (12, 20)) : FoldingRangeRegion +((10, 13) : (10, 27)) : FoldingRangeRegion +((10, 13) : (10, 22)) : FoldingRangeRegion +((10, 13) : (10, 14)) : FoldingRangeRegion +((10, 15) : (10, 20)) : FoldingRangeRegion +((10, 21) : (10, 22)) : FoldingRangeRegion +((10, 23) : (10, 25)) : FoldingRangeRegion +((10, 26) : (10, 27)) : FoldingRangeRegion +((11, 16) : (11, 21)) : FoldingRangeRegion +((12, 16) : (12, 20)) : FoldingRangeRegion \ No newline at end of file diff --git a/plugins/hls-code-range-plugin/test/testdata/folding-range/Function.hs b/plugins/hls-code-range-plugin/test/testdata/folding-range/Function.hs index 4a79afadacb..b73bece14fe 100644 --- a/plugins/hls-code-range-plugin/test/testdata/folding-range/Function.hs +++ b/plugins/hls-code-range-plugin/test/testdata/folding-range/Function.hs @@ -1,8 +1,13 @@ {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {-# HLINT ignore "Use module export list" #-} -module FuncMultiMatch where +module Function(isEven) where isEven :: Integer -> Bool isEven n = if n `mod` 2 == 0 then True else False + +isOdd :: Integer -> Bool +isOdd n = if n `mod` 2 == 0 + then False + else True