Skip to content

Commit 7310fe2

Browse files
authored
Merge pull request #13 from natefaubion/mod-reverse-lookup
Add reverse lookup for explicit imports
2 parents b6bc548 + 7aa2930 commit 7310fe2

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/IdePurescript/Modules.purs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ module IdePurescript.Modules (
33
, initialModulesState
44
, State
55
, getMainModule
6+
, getModuleName
67
, getModulesForFile
78
, getModulesForFileTemp
89
, getUnqualActiveModules
910
, getAllActiveModules
1011
, getQualModule
12+
, getModuleFromUnknownQualifier
1113
, findImportInsertPos
1214
, addModuleImport
1315
, addExplicitImport
@@ -16,9 +18,8 @@ module IdePurescript.Modules (
1618
) where
1719

1820
import Prelude
19-
import Node.FS.Aff as FS
20-
import PscIde as P
21-
import PscIde.Command as C
21+
22+
import Control.Alt ((<|>))
2223
import Control.Monad.Aff (Aff, attempt)
2324
import Control.Monad.Eff (Eff)
2425
import Control.Monad.Eff.Class (liftEff)
@@ -27,14 +28,19 @@ import Data.Either (either, Either(..))
2728
import Data.Foldable (all, notElem, elem)
2829
import Data.Maybe (Maybe(..), maybe, fromMaybe)
2930
import Data.Newtype (class Newtype)
31+
import Data.StrMap as SM
3032
import Data.String (Pattern(Pattern), split)
3133
import Data.String.Regex (regex) as R
3234
import Data.String.Regex.Flags (global, noFlags, multiline) as R
35+
import Data.Tuple (Tuple(..))
3336
import IdePurescript.Regex (replace', match', test')
3437
import Node.Encoding (Encoding(..))
3538
import Node.FS (FS)
39+
import Node.FS.Aff as FS
3640
import Node.Path (sep)
41+
import PscIde as P
3742
import PscIde.Command (ImportType(..))
43+
import PscIde.Command as C
3844

3945
newtype Module = Module
4046
{ moduleName :: String
@@ -63,6 +69,7 @@ type State =
6369
{ main :: Maybe String
6470
, modules :: Array Module
6571
, identifiers :: Array String
72+
, identToModule :: SM.StrMap Module
6673
}
6774

6875
type Path = String
@@ -80,12 +87,13 @@ getModulesForFile port file fullText = do
8087
C.ImportList { moduleName, imports } <- either (const default) id <$> P.listImports port file
8188
let modules = map mod imports
8289
main = maybe (getMainModule fullText) Just moduleName
83-
identifiers = concatMap idents modules
84-
pure { main, modules, identifiers }
90+
identToModule = SM.fromFoldable $ concatMap idents modules
91+
identifiers = SM.keys identToModule
92+
pure { main, modules, identifiers, identToModule }
8593
where
8694
default = C.ImportList { moduleName: Nothing, imports: [] }
8795
mod (C.Import imp) = Module imp
88-
idents (Module { importType: Explicit ids }) = ids
96+
idents m@(Module { importType: Explicit ids }) = flip Tuple m <$> ids
8997
idents _ = []
9098

9199
getModulesForFileTemp :: forall eff. Int -> Path -> String -> Aff (net :: P.NET, fs :: FS | eff) State
@@ -120,8 +128,12 @@ getQualModule qualifier {modules} =
120128
qual q (Module { qualifier: Just q' }) = q == q'
121129
qual _ _ = false
122130

131+
getModuleFromUnknownQualifier :: String -> State -> Maybe Module
132+
getModuleFromUnknownQualifier qual { identToModule } =
133+
SM.lookup qual identToModule <|> SM.lookup ("class " <> qual) identToModule
134+
123135
initialModulesState :: State
124-
initialModulesState = { main: Nothing, modules: [], identifiers: [] }
136+
initialModulesState = { main: Nothing, modules: [], identifiers: [], identToModule: SM.empty }
125137

126138
findImportInsertPos :: String -> Int
127139
findImportInsertPos text =

0 commit comments

Comments
 (0)