Skip to content

Commit deb8901

Browse files
committed
Move to GHC Util
1 parent e657ed3 commit deb8901

File tree

4 files changed

+58
-57
lines changed

4 files changed

+58
-57
lines changed

ghcide/src/Development/IDE/GHC/CoreFile.hs

Lines changed: 1 addition & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ module Development.IDE.GHC.CoreFile
1010
, readBinCoreFile
1111
, writeBinCoreFile
1212
, getImplicitBinds
13-
, occNamePrefixes
14-
, stripOccNamePrefix) where
13+
) where
1514

1615
import Control.Monad
1716
import Control.Monad.IO.Class
@@ -30,7 +29,6 @@ import GHC.Iface.Env
3029
#if MIN_VERSION_ghc(9,11,0)
3130
import qualified GHC.Iface.Load as Iface
3231
#endif
33-
import Data.Monoid (First (..))
3432
import GHC.Iface.Recomp.Binary (fingerprintBinMem)
3533
import GHC.IfaceToCore
3634
import GHC.Types.Id.Make
@@ -225,53 +223,3 @@ tc_iface_bindings (TopIfaceRec vs) = do
225223
vs' <- traverse (\(v, e) -> (v,) <$> tcIfaceExpr e) vs
226224
pure $ Rec vs'
227225

228-
-- | Prefixes that can occur in a GHC OccName
229-
occNamePrefixes :: [T.Text]
230-
occNamePrefixes =
231-
[
232-
-- long ones
233-
"$con2tag_"
234-
, "$tag2con_"
235-
, "$maxtag_"
236-
237-
-- four chars
238-
, "$sel:"
239-
, "$tc'"
240-
241-
-- three chars
242-
, "$dm"
243-
, "$co"
244-
, "$tc"
245-
, "$cp"
246-
, "$fx"
247-
248-
-- two chars
249-
, "$W"
250-
, "$w"
251-
, "$m"
252-
, "$b"
253-
, "$c"
254-
, "$d"
255-
, "$i"
256-
, "$s"
257-
, "$f"
258-
, "$r"
259-
, "C:"
260-
, "N:"
261-
, "D:"
262-
, "$p"
263-
, "$L"
264-
, "$f"
265-
, "$t"
266-
, "$c"
267-
, "$m"
268-
]
269-
270-
-- | When e.g. DuplicateRecordFields is enabled, compiler generates
271-
-- names like "$sel:accessor:One" and "$sel:accessor:Two" to
272-
-- disambiguate record selectors
273-
-- https://ghc.haskell.org/trac/ghc/wiki/Records/OverloadedRecordFields/DuplicateRecordFields#Implementation
274-
stripOccNamePrefix :: T.Text -> T.Text
275-
stripOccNamePrefix name = T.takeWhile (/=':') $ fromMaybe name $
276-
getFirst $ foldMap (First . (`T.stripPrefix` name))
277-
occNamePrefixes

ghcide/src/Development/IDE/GHC/Util.hs

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ module Development.IDE.GHC.Util(
2727
dontWriteHieFiles,
2828
disableWarningsAsErrors,
2929
printOutputable,
30-
getExtensions
30+
getExtensions,
31+
stripOccNamePrefix,
3132
) where
3233

3334
import Control.Concurrent
@@ -62,6 +63,7 @@ import GHC.IO.Handle.Types
6263
import Ide.PluginUtils (unescape)
6364
import System.FilePath
6465

66+
import Data.Monoid (First (..))
6567
import GHC.Data.EnumSet
6668
import GHC.Data.FastString
6769
import GHC.Data.StringBuffer
@@ -271,3 +273,55 @@ printOutputable =
271273

272274
getExtensions :: ParsedModule -> [Extension]
273275
getExtensions = toList . extensionFlags . ms_hspp_opts . pm_mod_summary
276+
277+
-- | When e.g. DuplicateRecordFields is enabled, compiler generates
278+
-- names like "$sel:accessor:One" and "$sel:accessor:Two" to
279+
-- disambiguate record selectors
280+
-- https://ghc.haskell.org/trac/ghc/wiki/Records/OverloadedRecordFields/DuplicateRecordFields#Implementation
281+
stripOccNamePrefix :: T.Text -> T.Text
282+
stripOccNamePrefix name = T.takeWhile (/=':') $ fromMaybe name $
283+
getFirst $ foldMap (First . (`T.stripPrefix` name))
284+
occNamePrefixes
285+
286+
-- | Prefixes that can occur in a GHC OccName
287+
occNamePrefixes :: [T.Text]
288+
occNamePrefixes =
289+
[
290+
-- long ones
291+
"$con2tag_"
292+
, "$tag2con_"
293+
, "$maxtag_"
294+
295+
-- four chars
296+
, "$sel:"
297+
, "$tc'"
298+
299+
-- three chars
300+
, "$dm"
301+
, "$co"
302+
, "$tc"
303+
, "$cp"
304+
, "$fx"
305+
306+
-- two chars
307+
, "$W"
308+
, "$w"
309+
, "$m"
310+
, "$b"
311+
, "$c"
312+
, "$d"
313+
, "$i"
314+
, "$s"
315+
, "$f"
316+
, "$r"
317+
, "C:"
318+
, "N:"
319+
, "D:"
320+
, "$p"
321+
, "$L"
322+
, "$f"
323+
, "$t"
324+
, "$c"
325+
, "$m"
326+
]
327+

ghcide/src/Development/IDE/Plugin/Completions/Logic.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ import Development.IDE.Core.PositionMapping
4343
import Development.IDE.GHC.Compat hiding (isQual, ppr)
4444
import qualified Development.IDE.GHC.Compat as GHC
4545
import Development.IDE.GHC.Compat.Util
46-
import Development.IDE.GHC.CoreFile (stripOccNamePrefix)
4746
import Development.IDE.GHC.Error
4847
import Development.IDE.GHC.Util
4948
import Development.IDE.Plugin.Completions.Types

plugins/hls-explicit-record-fields-plugin/src/Ide/Plugin/ExplicitFields.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ import Development.IDE.GHC.Compat.Core (Extension (NamedFieldPuns
8181
mapConPatDetail, mapLoc,
8282
pattern RealSrcSpan,
8383
plusUFM_C, unitUFM)
84-
import Development.IDE.GHC.CoreFile (stripOccNamePrefix)
8584
import Development.IDE.GHC.Util (getExtensions,
86-
printOutputable)
85+
printOutputable,
86+
stripOccNamePrefix)
8787
import Development.IDE.Graph (RuleResult)
8888
import Development.IDE.Graph.Classes (Hashable, NFData)
8989
import Development.IDE.Spans.Pragmas (NextPragmaInfo (..),

0 commit comments

Comments
 (0)