trace-embrace 1.2.0 → 1.3.0
raw patch · 4 files changed
+68/−39 lines, 4 filesdep +add-dependent-file
Dependencies added: add-dependent-file
Files
- changelog.md +4/−0
- src/Debug/TraceEmbrace/Config/Load.hs +33/−30
- trace-embrace.cabal +11/−9
- trace-embrace.yaml +20/−0
changelog.md view
@@ -1,5 +1,9 @@ # trace-embrace changelog +## Version 1.3.0 2026-02-26+ * fix rebuild bug with add-dependent-file package+ * fix trace-embrace.yaml duplication (created HLS)+ ## Version 1.2.0 2025-06-05 * support GHC-9.12.2
src/Debug/TraceEmbrace/Config/Load.hs view
@@ -2,25 +2,29 @@ {-# LANGUAGE OverloadedStrings #-} module Debug.TraceEmbrace.Config.Load where +import AddDependentFile ( addDependentFile, getPackageRoot, (</>) ) import Control.Concurrent-import Control.Exception-import Data.Cache.LRU as LRU-import Data.Char+ ( MVar, newMVar, takeMVar, putMVar, modifyMVar )+import Control.Exception ( catch, bracket )+import Data.Cache.LRU as LRU ( LRU, newLRU, lookup, insert )+import Data.Char ( toUpper, isDigit, isAlphaNum ) import Data.Generics.Labels ()-import Data.IORef+import Data.IORef ( IORef, newIORef, readIORef, atomicWriteIORef ) import Data.List qualified as L import Data.RadixTree.Word8.Strict qualified as T import Data.Yaml as Y+ ( decodeFileThrow, encodeFile, prettyPrintParseException ) import Debug.Trace (traceIO) import Debug.TraceEmbrace.Config.Type import Debug.TraceEmbrace.Config.Validation-import Language.Haskell.TH-import Language.Haskell.TH.Syntax-import Refined-import System.Directory+ ( refineS, required, SeparatorValidator )+import Language.Haskell.TH ( Q, Loc(loc_package), runIO )+import Language.Haskell.TH.Syntax ( Lift )+import Refined ( IdPred, Refined, NonEmpty, unrefine, refineTH )+import System.Directory ( doesFileExist ) import System.Environment (lookupEnv)-import System.IO-import System.IO.Unsafe+import System.IO ( Handle )+import System.IO.Unsafe ( unsafePerformIO ) validateTraceMessageFormat ::@@ -78,8 +82,8 @@ defaultYamlConfig :: YamlConfigMaybe defaultYamlConfig = newYamlConfig { version = Nothing } -loadYamlConfig :: IO YamlConfig-loadYamlConfig = do+loadYamlConfig :: FilePath -> IO YamlConfig+loadYamlConfig fp = do doesFileExist fp >>= \case True -> configFromJust . (<> defaultYamlConfig) =<< catch (Y.decodeFileThrow fp) badYaml@@ -98,7 +102,6 @@ badYaml e = fail $ "Fail to parse " <> show fp <> "file due:\n" <> prettyPrintParseException e <> "\nRename or delete existing config file to get default config."- fp = traceEmbraceConfigFileName traceEmbraceConfigFileName :: FilePath traceEmbraceConfigFileName = "trace-embrace.yaml"@@ -133,26 +136,26 @@ {-# NOINLINE configReadToken #-} getConfig :: Q TraceEmbraceConfig-getConfig = do- c <- runIO readConfigRef >>= loadIfNothing- runIO (doesFileExist traceEmbraceConfigFileName) >>= \case- True -> addDependentFile traceEmbraceConfigFileName- False -> reportWarning $ "Config File is missing - skip dependency"- pure c+getConfig = runIO readConfigRef >>= loadIfNothing where readConfigRef = readIORef traceEmbraceConfigRef loadIfNothing = \case- Nothing -> runIO $ do- bracket (takeMVar configReadToken)- (putMVar configReadToken)- (\() ->- readConfigRef >>= \case- Just c ->- pure c- Nothing -> do- c <- yaml2Config <$> loadYamlConfig- (atomicWriteIORef traceEmbraceConfigRef (Just c))- pure c)+ Nothing -> do+ ymConfPath <- (</> traceEmbraceConfigFileName) <$> getPackageRoot+ r <- runIO $ do+ bracket (takeMVar configReadToken)+ (putMVar configReadToken)+ (\() ->+ readConfigRef >>= \case+ Just c ->+ pure c+ Nothing -> do+ c <- yaml2Config <$> loadYamlConfig ymConfPath+ (atomicWriteIORef traceEmbraceConfigRef (Just c))+ pure c)+ addDependentFile ymConfPath++ pure r Just c -> pure c traceAll :: [LeveledModulePrefix]
trace-embrace.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: trace-embrace-version: 1.2.0+version: 1.3.0 license: BSD-3-Clause license-file: LICENSE category: Development@@ -341,7 +341,8 @@ A trace line for the snippet above would be: Module:fun: 7 get; x#: 1#-+extra-source-files:+ trace-embrace.yaml tested-with: GHC == 9.10.1, GHC == 9.12.2 extra-doc-files:@@ -376,13 +377,14 @@ import: base hs-source-dirs: src build-depends:- cpphs < 2,- deepseq < 1.8,- ghc < 9.13,- haddock-use-refs < 2,- radix-tree < 2,- tagged < 1,- transformers < 1+ , cpphs < 2+ , add-dependent-file < 1+ , deepseq < 1.8+ , ghc < 9.13+ , haddock-use-refs < 2+ , radix-tree < 2+ , tagged < 1+ , transformers < 1 exposed-modules: Debug.TraceEmbrace
+ trace-embrace.yaml view
@@ -0,0 +1,20 @@+levels:+- '-'+mode:+ tag: TraceStd+runtimeLevelsOverrideEnvVar:+ tag: CapsPackageName+traceMessage:+ entrySeparator: '; '+ keyValueSeparator: ': '+ retValPrefix: ' => '+ traceLinePattern:+ - tag: FullyQualifiedModule+ - contents: '::'+ tag: Delimiter+ - tag: FunctionName+ - contents: ': '+ tag: Delimiter+ - tag: LiteralMessage+ - tag: Variables+version: 1