mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
bdec99c48e
commit
9cde6cb7d5
|
@ -7,7 +7,7 @@
|
||||||
fixme-prefix FIXME:
|
fixme-prefix FIXME:
|
||||||
fixme-prefix TODO:
|
fixme-prefix TODO:
|
||||||
|
|
||||||
fixme-git-scan-filter-days 30
|
fixme-git-scan-filter-days 1
|
||||||
|
|
||||||
fixme-attribs assigned workflow
|
fixme-attribs assigned workflow
|
||||||
|
|
||||||
|
@ -20,13 +20,14 @@ fixme-value-set cat bug feat refactor
|
||||||
fixme-value-set scope mvp-0 mvp-1 backlog
|
fixme-value-set scope mvp-0 mvp-1 backlog
|
||||||
|
|
||||||
|
|
||||||
fixme-files **/*.txt docs/devlog.md
|
;fixme-files **/*.txt docs/devlog.md
|
||||||
fixme-files **/*.hs
|
; fixme-files **/*.hs
|
||||||
|
fixme-files **/Run.hs
|
||||||
|
|
||||||
fixme-file-comments "*.scm" ";"
|
fixme-file-comments "*.scm" ";"
|
||||||
|
|
||||||
fixme-comments ";" "--"
|
fixme-comments ";" "--"
|
||||||
|
|
||||||
update
|
; update
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,7 @@ common shared-properties
|
||||||
, filepath
|
, filepath
|
||||||
, filepattern
|
, filepattern
|
||||||
, generic-lens
|
, generic-lens
|
||||||
|
, generic-deriving
|
||||||
, interpolatedstring-perl6
|
, interpolatedstring-perl6
|
||||||
, memory
|
, memory
|
||||||
, microlens-platform
|
, microlens-platform
|
||||||
|
|
|
@ -34,6 +34,7 @@ import Data.Text qualified as Text
|
||||||
import Data.Text.Encoding qualified as Text
|
import Data.Text.Encoding qualified as Text
|
||||||
import Data.Text.Encoding (decodeUtf8With)
|
import Data.Text.Encoding (decodeUtf8With)
|
||||||
import Data.Text.Encoding.Error (ignore)
|
import Data.Text.Encoding.Error (ignore)
|
||||||
|
import Data.List qualified as List
|
||||||
import Data.Word
|
import Data.Word
|
||||||
import Text.InterpolatedString.Perl6 (qc)
|
import Text.InterpolatedString.Perl6 (qc)
|
||||||
import Data.Coerce
|
import Data.Coerce
|
||||||
|
@ -47,6 +48,11 @@ import System.IO qualified as IO
|
||||||
|
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
|
|
||||||
|
import Data.IntMap qualified as IntMap
|
||||||
|
import Data.Map qualified as Map
|
||||||
|
import Data.Map (Map)
|
||||||
|
import Data.Set qualified as Set
|
||||||
|
|
||||||
{- HLINT ignore "Functor law" -}
|
{- HLINT ignore "Functor law" -}
|
||||||
|
|
||||||
pattern Init :: forall {c}. Syntax c
|
pattern Init :: forall {c}. Syntax c
|
||||||
|
@ -326,12 +332,13 @@ scanGitLocal args p = do
|
||||||
prefix <- liftIO (BS.hGetLine ssout) <&> BS.words
|
prefix <- liftIO (BS.hGetLine ssout) <&> BS.words
|
||||||
|
|
||||||
case prefix of
|
case prefix of
|
||||||
[_, "blob", ssize] -> do
|
[bh, "blob", ssize] -> do
|
||||||
let mslen = readMay @Int (BS.unpack ssize)
|
let mslen = readMay @Int (BS.unpack ssize)
|
||||||
len <- ContT $ maybe1 mslen (pure ())
|
len <- ContT $ maybe1 mslen (pure ())
|
||||||
blob <- liftIO $ LBS8.hGet ssout len
|
blob <- liftIO $ LBS8.hGet ssout len
|
||||||
void $ liftIO $ BS.hGetLine ssout
|
void $ liftIO $ BS.hGetLine ssout
|
||||||
|
|
||||||
|
|
||||||
poor <- lift (Scan.scanBlob (Just fp) blob)
|
poor <- lift (Scan.scanBlob (Just fp) blob)
|
||||||
|
|
||||||
rich <- withDB tempDb do
|
rich <- withDB tempDb do
|
||||||
|
@ -361,6 +368,7 @@ scanGitLocal args p = do
|
||||||
WHERE RelevantCommits.hash = ?
|
WHERE RelevantCommits.hash = ?
|
||||||
|]
|
|]
|
||||||
|
|
||||||
|
|
||||||
what <- select @(FixmeAttrName,FixmeAttrVal) q (Only h)
|
what <- select @(FixmeAttrName,FixmeAttrVal) q (Only h)
|
||||||
<&> HM.fromList
|
<&> HM.fromList
|
||||||
<&> (<> HM.fromList [ ("blob",fromString $ show (pretty h))
|
<&> (<> HM.fromList [ ("blob",fromString $ show (pretty h))
|
||||||
|
@ -368,14 +376,53 @@ scanGitLocal args p = do
|
||||||
])
|
])
|
||||||
|
|
||||||
for poor $ \f -> do
|
for poor $ \f -> do
|
||||||
|
let lno = maybe mempty ( HM.singleton "line"
|
||||||
|
. FixmeAttrVal
|
||||||
|
. Text.pack
|
||||||
|
. show
|
||||||
|
)
|
||||||
|
(fixmeStart f)
|
||||||
|
|
||||||
let ts = HM.lookup "commit-time" what
|
let ts = HM.lookup "commit-time" what
|
||||||
<&> Text.unpack . coerce
|
<&> Text.unpack . coerce
|
||||||
>>= readMay
|
>>= readMay
|
||||||
<&> FixmeTimestamp
|
<&> FixmeTimestamp
|
||||||
|
|
||||||
pure $ set (field @"fixmeTs") ts $ over (field @"fixmeAttr") (<> what) f
|
pure $ set (field @"fixmeTs") ts $ over (field @"fixmeAttr") (<> (what <> lno)) f
|
||||||
|
|
||||||
let fixmies = rich
|
|
||||||
|
let fxpos1 = [ (fixmeTitle fx, [i :: Int])
|
||||||
|
| (i,fx) <- zip [0..] rich
|
||||||
|
-- , fixmeTitle fx /= mempty
|
||||||
|
] & Map.fromListWith (flip (<>))
|
||||||
|
|
||||||
|
let mt e = do
|
||||||
|
let seed = [ (fst e, i) | i <- snd e ]
|
||||||
|
flip fix (0,[],seed) $ \next (num,acc,rest) ->
|
||||||
|
case rest of
|
||||||
|
[] -> acc
|
||||||
|
(x:xs) -> next (succ num, (x,num) : acc, xs)
|
||||||
|
|
||||||
|
let fxpos2 = [ mt e
|
||||||
|
| e <- Map.toList fxpos1
|
||||||
|
] & mconcat
|
||||||
|
& Map.fromList
|
||||||
|
|
||||||
|
debug $ red "fxpos1" <+> pretty h <> line <> pretty (Map.toList fxpos1)
|
||||||
|
debug $ red "fxpos2" <+> pretty h <> line <> pretty (Map.toList fxpos2)
|
||||||
|
|
||||||
|
fixmies <- for (zip [0..] rich) $ \(i,fx) -> do
|
||||||
|
let title = fixmeTitle fx
|
||||||
|
let kb = Map.lookup (title,i) fxpos2
|
||||||
|
let ka = HM.lookup "file" (fixmeAttr fx)
|
||||||
|
let kk = (,,) <$> ka <*> pure title <*> kb
|
||||||
|
|
||||||
|
case kk of
|
||||||
|
Nothing -> pure fx
|
||||||
|
Just (a,b,c) -> do
|
||||||
|
let ks = [qc|{show (pretty a)}#{show (pretty b)}:{show c}|] :: Text
|
||||||
|
let kv = HM.singleton "fixme-key" (FixmeAttrVal ks)
|
||||||
|
pure $ over (field @"fixmeAttr") (<> kv) fx
|
||||||
|
|
||||||
when ( PrintFixme `elem` args ) do
|
when ( PrintFixme `elem` args ) do
|
||||||
for_ fixmies $ \fixme -> do
|
for_ fixmies $ \fixme -> do
|
||||||
|
@ -558,6 +605,9 @@ run what = do
|
||||||
ListVal [SymbolVal "builtin:evolve"] -> do
|
ListVal [SymbolVal "builtin:evolve"] -> do
|
||||||
evolve
|
evolve
|
||||||
|
|
||||||
|
ListVal [SymbolVal "builtin:cleanup-state"] -> do
|
||||||
|
cleanupDatabase
|
||||||
|
|
||||||
ListVal [SymbolVal "trace"] -> do
|
ListVal [SymbolVal "trace"] -> do
|
||||||
setLogging @TRACE (logPrefix "[trace] " . toStderr)
|
setLogging @TRACE (logPrefix "[trace] " . toStderr)
|
||||||
trace "trace on"
|
trace "trace on"
|
||||||
|
|
|
@ -159,12 +159,13 @@ scanBlob fpath lbs = do
|
||||||
Fixme (FixmeTag tag)
|
Fixme (FixmeTag tag)
|
||||||
(FixmeTitle title)
|
(FixmeTitle title)
|
||||||
Nothing
|
Nothing
|
||||||
|
Nothing
|
||||||
(Just (FixmeOffset (fromIntegral lno)))
|
(Just (FixmeOffset (fromIntegral lno)))
|
||||||
Nothing
|
Nothing
|
||||||
mempty
|
mempty
|
||||||
mempty
|
mempty
|
||||||
|
|
||||||
_ -> Fixme mempty mempty Nothing Nothing Nothing mempty mempty
|
_ -> mempty
|
||||||
|
|
||||||
emitFixmeStart lno lvl tagbs restbs = do
|
emitFixmeStart lno lvl tagbs restbs = do
|
||||||
let tag = decodeUtf8With ignore (LBS8.toStrict tagbs) & Text.strip
|
let tag = decodeUtf8With ignore (LBS8.toStrict tagbs) & Text.strip
|
||||||
|
|
|
@ -10,6 +10,7 @@ module Fixme.State
|
||||||
, insertCommit
|
, insertCommit
|
||||||
, selectCommit
|
, selectCommit
|
||||||
, newCommit
|
, newCommit
|
||||||
|
, cleanupDatabase
|
||||||
, HasPredicate(..)
|
, HasPredicate(..)
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
@ -346,3 +347,14 @@ order by f.ts nulls first
|
||||||
select sql (snd predic) <&> mapMaybe (Aeson.decode @FixmeThin . fromOnly)
|
select sql (snd predic) <&> mapMaybe (Aeson.decode @FixmeThin . fromOnly)
|
||||||
|
|
||||||
|
|
||||||
|
cleanupDatabase :: (FixmePerks m, MonadReader FixmeEnv m) => m ()
|
||||||
|
cleanupDatabase = do
|
||||||
|
warn $ red "cleanupDatabase"
|
||||||
|
withState $ transactional do
|
||||||
|
update_ [qc|delete from fixme|]
|
||||||
|
update_ [qc|delete from fixmeattr|]
|
||||||
|
update_ [qc|delete from fixmecommit|]
|
||||||
|
update_ [qc|delete from fixmedeleted|]
|
||||||
|
update_ [qc|delete from fixmerel|]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import HBS2.Git.Local
|
||||||
|
|
||||||
import Data.Config.Suckless
|
import Data.Config.Suckless
|
||||||
|
|
||||||
|
import Control.Applicative
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import Data.HashMap.Strict (HashMap)
|
import Data.HashMap.Strict (HashMap)
|
||||||
import Data.HashMap.Strict qualified as HM
|
import Data.HashMap.Strict qualified as HM
|
||||||
|
@ -22,6 +23,7 @@ import Data.Coerce
|
||||||
import Data.Text qualified as Text
|
import Data.Text qualified as Text
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import Text.InterpolatedString.Perl6 (qc)
|
import Text.InterpolatedString.Perl6 (qc)
|
||||||
|
import Lens.Micro.Platform
|
||||||
|
|
||||||
|
|
||||||
pattern StringLike :: forall {c} . String -> Syntax c
|
pattern StringLike :: forall {c} . String -> Syntax c
|
||||||
|
@ -79,6 +81,10 @@ newtype FixmeTimestamp = FixmeTimestamp Word64
|
||||||
deriving stock (Data,Generic)
|
deriving stock (Data,Generic)
|
||||||
|
|
||||||
|
|
||||||
|
newtype FixmeKey = FixmeKey Text
|
||||||
|
deriving newtype (Eq,Ord,Show,ToField,FromField)
|
||||||
|
deriving stock (Data,Generic)
|
||||||
|
|
||||||
newtype FixmeOffset = FixmeOffset Word32
|
newtype FixmeOffset = FixmeOffset Word32
|
||||||
deriving newtype (Eq,Ord,Show,Num,ToField,FromField)
|
deriving newtype (Eq,Ord,Show,Num,ToField,FromField)
|
||||||
deriving stock (Data,Generic)
|
deriving stock (Data,Generic)
|
||||||
|
@ -88,6 +94,7 @@ data Fixme =
|
||||||
Fixme
|
Fixme
|
||||||
{ fixmeTag :: FixmeTag
|
{ fixmeTag :: FixmeTag
|
||||||
, fixmeTitle :: FixmeTitle
|
, fixmeTitle :: FixmeTitle
|
||||||
|
, fixmeKey :: Maybe FixmeKey
|
||||||
, fixmeTs :: Maybe FixmeTimestamp
|
, fixmeTs :: Maybe FixmeTimestamp
|
||||||
, fixmeStart :: Maybe FixmeOffset
|
, fixmeStart :: Maybe FixmeOffset
|
||||||
, fixmeEnd :: Maybe FixmeOffset
|
, fixmeEnd :: Maybe FixmeOffset
|
||||||
|
@ -96,10 +103,24 @@ data Fixme =
|
||||||
}
|
}
|
||||||
deriving stock (Show,Data,Generic)
|
deriving stock (Show,Data,Generic)
|
||||||
|
|
||||||
|
instance Monoid Fixme where
|
||||||
|
mempty = Fixme mempty mempty Nothing Nothing Nothing Nothing mempty mempty
|
||||||
|
|
||||||
|
instance Semigroup Fixme where
|
||||||
|
(<>) a b = b { fixmeTs = fixmeTs b <|> fixmeTs a
|
||||||
|
, fixmeStart = fixmeStart b <|> fixmeStart a
|
||||||
|
, fixmeEnd = fixmeEnd b <|> fixmeEnd a
|
||||||
|
, fixmePlain = fixmePlain b
|
||||||
|
, fixmeAttr = fixmeAttr a <> fixmeAttr b
|
||||||
|
}
|
||||||
|
|
||||||
newtype FixmeThin = FixmeThin (HashMap FixmeAttrName FixmeAttrVal)
|
newtype FixmeThin = FixmeThin (HashMap FixmeAttrName FixmeAttrVal)
|
||||||
deriving newtype (Semigroup,Monoid,Eq,Ord,Show,ToJSON,FromJSON)
|
deriving newtype (Semigroup,Monoid,Eq,Ord,Show,ToJSON,FromJSON)
|
||||||
deriving stock (Data,Generic)
|
deriving stock (Data,Generic)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
type FixmePerks m = ( MonadUnliftIO m
|
type FixmePerks m = ( MonadUnliftIO m
|
||||||
, MonadIO m
|
, MonadIO m
|
||||||
)
|
)
|
||||||
|
@ -161,6 +182,7 @@ instance Serialise FixmeAttrName
|
||||||
instance Serialise FixmeAttrVal
|
instance Serialise FixmeAttrVal
|
||||||
instance Serialise FixmeTimestamp
|
instance Serialise FixmeTimestamp
|
||||||
instance Serialise FixmeOffset
|
instance Serialise FixmeOffset
|
||||||
|
instance Serialise FixmeKey
|
||||||
instance Serialise Fixme
|
instance Serialise Fixme
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue