11module Server.Model.Symbol
22 ( SymbolKind (.. ),
33 SymbolInfo (.. ),
4+ symbolShortName ,
5+ lspSymbolKind ,
46 RefKind (.. ),
57 Ref (.. ),
8+ refIsDef ,
69 )
710where
811
912import qualified Agda.Syntax.Abstract as A
10- import Agda.Syntax.Common.Pretty (Doc , Pretty , comma , parensNonEmpty , pretty , pshow , text , (<+>) )
13+ import Agda.Syntax.Common.Pretty (Doc , Pretty , comma , parensNonEmpty , pretty , prettyShow , pshow , text , (<+>) )
1114import Control.Applicative ((<|>) )
15+ import Data.Text (Text )
16+ import qualified Data.Text as Text
1217import qualified Language.LSP.Protocol.Types as LSP
1318import Language.LSP.Protocol.Types.More ()
1419
@@ -37,8 +42,27 @@ instance Semigroup SymbolKind where
3742 Unknown <> k = k
3843 k <> _k = k
3944
45+ toLspSymbolKind :: SymbolKind -> LSP. SymbolKind
46+ toLspSymbolKind = \ case
47+ Con -> LSP. SymbolKind_Constructor
48+ CoCon -> LSP. SymbolKind_Constructor
49+ Field -> LSP. SymbolKind_Field
50+ PatternSyn -> LSP. SymbolKind_Function
51+ GeneralizeVar -> LSP. SymbolKind_Variable
52+ Macro -> LSP. SymbolKind_Function
53+ Data -> LSP. SymbolKind_Enum
54+ Record -> LSP. SymbolKind_Struct
55+ Fun -> LSP. SymbolKind_Function
56+ Axiom -> LSP. SymbolKind_Constant
57+ Prim -> LSP. SymbolKind_Constant
58+ Module -> LSP. SymbolKind_Module
59+ Param -> LSP. SymbolKind_Variable
60+ Local -> LSP. SymbolKind_Variable
61+ Unknown -> LSP. SymbolKind_Variable
62+
4063data SymbolInfo = SymbolInfo
41- { symbolKind :: ! SymbolKind ,
64+ { symbolName :: ! A. QName ,
65+ symbolKind :: ! SymbolKind ,
4266 symbolType :: ! (Maybe String ),
4367 symbolParent :: ! (Maybe A. QName )
4468 }
@@ -51,10 +75,17 @@ instance Pretty SymbolInfo where
5175instance Semigroup SymbolInfo where
5276 new <> old =
5377 SymbolInfo
78+ (symbolName new)
5479 (symbolKind old <> symbolKind new)
5580 (symbolType old <|> symbolType new)
5681 (symbolParent old <|> symbolParent new)
5782
83+ symbolShortName :: SymbolInfo -> Text
84+ symbolShortName = Text. pack . prettyShow . symbolName
85+
86+ lspSymbolKind :: SymbolInfo -> LSP. SymbolKind
87+ lspSymbolKind = toLspSymbolKind . symbolKind
88+
5889data RefKind
5990 = -- | The symbol is being declared. There should be at most one declaration
6091 -- for any given symbol (in correct Agda code). Roughly speaking, this is
@@ -95,3 +126,6 @@ instance Pretty Ref where
95126 pretty ref =
96127 ((prettyAmbiguity ref <+> pretty (refKind ref)) <> comma)
97128 <+> pretty (refRange ref)
129+
130+ refIsDef :: Ref -> Bool
131+ refIsDef ref = refKind ref == Def
0 commit comments