Skip to content

Commit

Permalink
Cabal ignore if for completions
Browse files Browse the repository at this point in the history
If conditions were previously handled as normal sections, for which we
don't have any completion information. Now, we ignore the if section
and use the parent section for completion purposes.

Co-authored-by: SamuelLess <[email protected]>
  • Loading branch information
yndolg and SamuelLess committed Oct 12, 2024
1 parent ed96358 commit e9ffcc2
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ findCursorContext cursor parentHistory prefixText fields =
Just field@(Syntax.Field _ _) -> classifyFieldContext parentHistory cursor field
Just section@(Syntax.Section _ args sectionFields)
| inSameLineAsSectionName section -> (stanzaCtx, None) -- TODO: test whether keyword in same line is parsed correctly
| getFieldName section == "if" -> findCursorContext cursor parentHistory prefixText sectionFields -- Ignore if conditionals, they are not real sections
| otherwise ->
findCursorContext cursor
(NE.cons (Syntax.positionCol (getAnnotation section) + 1, Stanza (getFieldName section) (getOptionalSectionName args)) parentHistory)
Expand Down
11 changes: 11 additions & 0 deletions plugins/hls-cabal-plugin/test/Context.hs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,9 @@ getContextTests =
, testCase "Top level - cursor in later line with partially written value" $ do
ctx <- callGetContext (Position 5 13) "eee" topLevelData
ctx @?= (TopLevel, KeyWord "name:")
, testCase "If is ignored" $ do
ctx <- callGetContext (Position 5 8) "" ifData
ctx @?= (Stanza "library" Nothing, None)
, testCase "Named Stanza" $ do
ctx <- callGetContext (Position 2 18) "" executableStanzaData
ctx @?= (TopLevel, None)
Expand Down Expand Up @@ -237,6 +240,14 @@ name:
eee
|]

ifData :: T.Text
ifData = [trimming|
cabal-version: 3.0
name: simple-cabal
library
if os(windows)

|]
multiLineOptsData :: T.Text
multiLineOptsData = [trimming|
cabal-version: 3.0
Expand Down

0 comments on commit e9ffcc2

Please sign in to comment.