diff --git a/src/Renderer/TOC.hs b/src/Renderer/TOC.hs index fad5509c9..90a98c367 100644 --- a/src/Renderer/TOC.hs +++ b/src/Renderer/TOC.hs @@ -33,6 +33,7 @@ import Data.These import Data.Union import Diff import Info +import Language import Patch import Prologue import qualified Data.List as List @@ -62,14 +63,15 @@ data JSONSummary { summaryCategoryName :: Text , summaryTermName :: Text , summarySpan :: Span + , summaryLanguage :: Language , summaryChangeType :: Text } - | ErrorSummary { error :: Text, errorSpan :: Span } + | ErrorSummary { error :: Text, errorSpan :: Span, errorLanguage :: Language } deriving (Generic, Eq, Show) instance ToJSON JSONSummary where - toJSON JSONSummary{..} = object [ "changeType" .= summaryChangeType, "category" .= summaryCategoryName, "term" .= summaryTermName, "span" .= summarySpan ] - toJSON ErrorSummary{..} = object [ "error" .= error, "span" .= errorSpan ] + toJSON JSONSummary{..} = object [ "changeType" .= summaryChangeType, "category" .= summaryCategoryName, "term" .= summaryTermName, "span" .= summarySpan, "language" .= summaryLanguage ] + toJSON ErrorSummary{..} = object [ "error" .= error, "span" .= errorSpan, "language" .= errorLanguage ] isValidSummary :: JSONSummary -> Bool isValidSummary ErrorSummary{} = False @@ -171,19 +173,19 @@ dedupe = foldl' go [] similarDeclaration = (==) `on` fmap (toLower . declarationIdentifier) . getDeclaration -- | Construct a 'JSONSummary' from an 'Entry'. Returns 'Nothing' for 'Unchanged' patches. -entrySummary :: (HasField fields (Maybe Declaration), HasField fields Span) => Entry (Record fields) -> Maybe JSONSummary -entrySummary entry = case entry of +entrySummary :: (HasField fields (Maybe Declaration), HasField fields Span) => Language -> Entry (Record fields) -> Maybe JSONSummary +entrySummary language entry = case entry of Unchanged _ -> Nothing - Changed a -> recordSummary a "modified" - Deleted a -> recordSummary a "removed" - Inserted a -> recordSummary a "added" - Replaced a -> recordSummary a "modified" + Changed a -> recordSummary language a "modified" + Deleted a -> recordSummary language a "removed" + Inserted a -> recordSummary language a "added" + Replaced a -> recordSummary language a "modified" -- | Construct a 'JSONSummary' from a node annotation and a change type label. -recordSummary :: (HasField fields (Maybe Declaration), HasField fields Span) => Record fields -> Text -> Maybe JSONSummary -recordSummary record = case getDeclaration record of - Just (ErrorDeclaration text) -> Just . const (ErrorSummary text (sourceSpan record)) - Just declaration -> Just . JSONSummary (toCategoryName declaration) (declarationIdentifier declaration) (sourceSpan record) +recordSummary :: (HasField fields (Maybe Declaration), HasField fields Span) => Language -> Record fields -> Text -> Maybe JSONSummary +recordSummary language record = case getDeclaration record of + Just (ErrorDeclaration text) -> Just . const (ErrorSummary text (sourceSpan record) language) + Just declaration -> Just . JSONSummary (toCategoryName declaration) (declarationIdentifier declaration) (sourceSpan record) language Nothing -> const Nothing renderToCDiff :: (HasField fields (Maybe Declaration), HasField fields Span, Traversable f) => Both Blob -> Diff f (Record fields) -> Summaries @@ -201,11 +203,11 @@ renderToCTerm blob = uncurry Summaries . bimap toMap toMap . List.partition isVa where toMap [] = mempty toMap as = Map.singleton (toS (blobPath blob)) (toJSON <$> as) -diffTOC :: (HasField fields (Maybe Declaration), HasField fields Span, Traversable f) => Diff f (Record fields) -> [JSONSummary] -diffTOC = mapMaybe entrySummary . dedupe . tableOfContentsBy declaration +diffTOC :: (HasField fields (Maybe Declaration), HasField fields Span, Traversable f) => Language -> Diff f (Record fields) -> [JSONSummary] +diffTOC language = mapMaybe (entrySummary language) . dedupe . tableOfContentsBy declaration -termToC :: (HasField fields (Maybe Declaration), HasField fields Span, Traversable f) => Term f (Record fields) -> [JSONSummary] -termToC = mapMaybe (flip recordSummary "unchanged") . termTableOfContentsBy declaration +termToC :: (HasField fields (Maybe Declaration), HasField fields Span, Traversable f) => Language -> Term f (Record fields) -> [JSONSummary] +termToC language = mapMaybe (flip (recordSummary language) "unchanged") . termTableOfContentsBy declaration -- The user-facing category name toCategoryName :: Declaration -> Text