diff options
Diffstat (limited to 'source/Felix/Parse.hs')
| -rw-r--r-- | source/Felix/Parse.hs | 426 |
1 files changed, 87 insertions, 339 deletions
diff --git a/source/Felix/Parse.hs b/source/Felix/Parse.hs index 751f09c..0a46d82 100644 --- a/source/Felix/Parse.hs +++ b/source/Felix/Parse.hs @@ -71,32 +71,14 @@ module Felix.Parse , parsedWorkspaceModules , parsedWorkspaceImportedBeforeImporter , importedBeforeImporterBlocks - , parseSourceWorkspace - , ParseMeasurements - , parseMeasurementResolutionNanoseconds - , parseMeasurementTokenizationNanoseconds - , parseMeasurementScanningNanoseconds - , parseMeasurementSyntaxInterfaceNanoseconds - , parseMeasurementParsingNanoseconds - , parseMeasurementParsedHitCount - , parseMeasurementParsedMissCount - , parseMeasurementParserTableMaterializationCount - , parseMeasurementModuleCount - , parseMeasurementImportOccurrenceCount - , parseMeasurementChunkCount - , parseMeasurementSourceByteCount - , parseMeasurementCandidateProbeCount - , parseMeasurementCanonicalizationCount - , parseMeasurementTargetInspectionCount - , parseSourceWorkspaceMeasured - , parseSourceWorkspaceMeasuredWithSyntaxInputs - , parseSourceWorkspaceMeasuredWithSyntaxInputsAndGraphValidation - , parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputs - , parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndGraphValidation - , parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndCallback - , parseSourceWorkspaceWith + , parseSourceWorkspaceWithSyntaxInputs + , parseSourceWorkspaceWithSyntaxInputsAndGraphValidation + , parseSourceWorkspaceWithStoreAndSyntaxInputs + , parseSourceWorkspaceWithStoreAndSyntaxInputsAndGraphValidation + , parseSourceWorkspaceWithStoreAndSyntaxInputsAndCallback , parseResolvedSourceGraph , parseResolvedSourceGraphWith + , parseResolvedSourceGraphWithStoreAndSyntaxInputsAndGraphValidation ) where import Base @@ -108,9 +90,9 @@ import Felix.Source import Felix.Source.Content qualified as Content import Felix.Source.Graph import Felix.Store qualified as Store -import Report.Location -import Syntax.Abstract qualified as Raw -import Syntax.Adapt +import Felix.Report.Location +import Felix.Syntax.Abstract qualified as Raw +import Felix.Syntax.Adapt ( LexicalScanError(..) , ScannedLexicalItem , SyntaxMaterializationError(..) @@ -119,11 +101,11 @@ import Syntax.Adapt , scanChunk , scannedItemMarker ) -import Syntax.Concrete (grammar) -import Syntax.Interface -import Syntax.Lexicon (Lexicon) -import Syntax.Pragma -import Syntax.Token +import Felix.Syntax.Concrete (grammar) +import Felix.Syntax.Interface +import Felix.Syntax.Lexicon (Lexicon) +import Felix.Syntax.Pragma +import Felix.Syntax.Token import Control.DeepSeq (NFData, force) import Control.Exception (Exception, evaluate) @@ -1096,154 +1078,88 @@ data ModuleSyntaxContext = ModuleSyntaxContext , syntaxContextImportedEntries :: !SyntaxEntryInventory } --- | Invocation-local parser work. A module is one strictly read source file. -data ParseMeasurements = ParseMeasurements - { parseMeasurementResolutionNanoseconds :: !Word64 - , parseMeasurementTokenizationNanoseconds :: !Word64 - , parseMeasurementScanningNanoseconds :: !Word64 - , parseMeasurementSyntaxInterfaceNanoseconds :: !Word64 - , parseMeasurementParsingNanoseconds :: !Word64 - , parseMeasurementParsedHitCount :: !Int - , parseMeasurementParsedMissCount :: !Int - , parseMeasurementParserTableMaterializationCount :: !Int - , parseMeasurementModuleCount :: !Int - , parseMeasurementImportOccurrenceCount :: !Int - , parseMeasurementChunkCount :: !Int - , parseMeasurementSourceByteCount :: !Word64 - , parseMeasurementCandidateProbeCount :: !Int - , parseMeasurementCanonicalizationCount :: !Int - , parseMeasurementTargetInspectionCount :: !Int - } - deriving stock (Show, Eq) - --- | Resolve, strictly load, and parse one source closure without callbacks. --- --- Mounts and the root request are explicit. Resolution, loading, and location --- registration perform filesystem and process-local registry I/O. This entry --- point does not initialize checking, provers, logging, or rendering. -parseSourceWorkspace - :: SourceMounts - -> RootRequest - -> IO (Either ParseWorkspaceError ParsedSourceWorkspace) -parseSourceWorkspace mounts request = - parseSourceWorkspaceWith mounts request (\_source _block -> pure ()) - -parseSourceWorkspaceMeasured - :: SourceMounts - -> RootRequest - -> IO - (Either - ParseWorkspaceError - (ParsedSourceWorkspace, ParseMeasurements)) -parseSourceWorkspaceMeasured mounts request = - parseSourceWorkspaceMeasuredWithSyntaxInputsAndCallback - mounts - request - (const []) - (\_source _block -> pure ()) - -parseSourceWorkspaceMeasuredWithSyntaxInputs +parseSourceWorkspaceWithSyntaxInputs :: SourceMounts -> RootRequest -> (ResolvedSource -> [ModuleSyntaxInterface]) - -> IO - (Either - ParseWorkspaceError - (ParsedSourceWorkspace, ParseMeasurements)) + -> IO (Either ParseWorkspaceError ParsedSourceWorkspace) -- Implicit syntax inputs must be self-contained module interfaces. -parseSourceWorkspaceMeasuredWithSyntaxInputs mounts request syntaxInputs = - parseSourceWorkspaceMeasuredWithSyntaxInputsAndGraphValidation +parseSourceWorkspaceWithSyntaxInputs mounts request syntaxInputs = + parseSourceWorkspaceWithSyntaxInputsAndGraphValidation mounts request syntaxInputs (const (Right ())) -parseSourceWorkspaceMeasuredWithSyntaxInputsAndGraphValidation +parseSourceWorkspaceWithSyntaxInputsAndGraphValidation :: SourceMounts -> RootRequest -> (ResolvedSource -> [ModuleSyntaxInterface]) -> (ResolvedSourceGraph -> Either SourceError ()) - -> IO - (Either - ParseWorkspaceError - (ParsedSourceWorkspace, ParseMeasurements)) -parseSourceWorkspaceMeasuredWithSyntaxInputsAndGraphValidation + -> IO (Either ParseWorkspaceError ParsedSourceWorkspace) +parseSourceWorkspaceWithSyntaxInputsAndGraphValidation mounts request syntaxInputs validateGraph = - parseSourceWorkspaceMeasuredWithSyntaxInputsAndGraphValidationAndCallback + parseSourceWorkspaceWithSyntaxInputsAndGraphValidationAndCallback mounts request syntaxInputs validateGraph (\_source _block -> pure ()) -parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputs +parseSourceWorkspaceWithStoreAndSyntaxInputs :: Store.Store -> SourceMounts -> RootRequest -> (ResolvedSource -> [ModuleSyntaxInterface]) - -> IO - (Either - ParseExecutionError - (ParsedSourceWorkspace, ParseMeasurements)) -parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputs + -> IO (Either ParseExecutionError ParsedSourceWorkspace) +parseSourceWorkspaceWithStoreAndSyntaxInputs store mounts request syntaxInputs = - parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndGraphValidation + parseSourceWorkspaceWithStoreAndSyntaxInputsAndGraphValidation store mounts request syntaxInputs (const (Right ())) -parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndGraphValidation +parseSourceWorkspaceWithStoreAndSyntaxInputsAndGraphValidation :: Store.Store -> SourceMounts -> RootRequest -> (ResolvedSource -> [ModuleSyntaxInterface]) -> (ResolvedSourceGraph -> Either SourceError ()) - -> IO - (Either - ParseExecutionError - (ParsedSourceWorkspace, ParseMeasurements)) -parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndGraphValidation + -> IO (Either ParseExecutionError ParsedSourceWorkspace) +parseSourceWorkspaceWithStoreAndSyntaxInputsAndGraphValidation store mounts request syntaxInputs validateGraph = - parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndGraphValidationAndCallback + parseSourceWorkspaceWithStoreAndSyntaxInputsAndGraphValidationAndCallback store mounts request syntaxInputs validateGraph (\_source _block -> pure ()) -parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndCallback +parseSourceWorkspaceWithStoreAndSyntaxInputsAndCallback :: Store.Store -> SourceMounts -> RootRequest -> (ResolvedSource -> [ModuleSyntaxInterface]) -> (ResolvedSource -> Raw.Block -> IO ()) - -> IO - (Either - ParseExecutionError - (ParsedSourceWorkspace, ParseMeasurements)) -parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndCallback + -> IO (Either ParseExecutionError ParsedSourceWorkspace) +parseSourceWorkspaceWithStoreAndSyntaxInputsAndCallback store mounts request syntaxInputs emitBlock = do - parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndGraphValidationAndCallback + parseSourceWorkspaceWithStoreAndSyntaxInputsAndGraphValidationAndCallback store mounts request syntaxInputs (const (Right ())) emitBlock -parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndGraphValidationAndCallback +parseSourceWorkspaceWithStoreAndSyntaxInputsAndGraphValidationAndCallback :: Store.Store -> SourceMounts -> RootRequest -> (ResolvedSource -> [ModuleSyntaxInterface]) -> (ResolvedSourceGraph -> Either SourceError ()) -> (ResolvedSource -> Raw.Block -> IO ()) - -> IO - (Either - ParseExecutionError - (ParsedSourceWorkspace, ParseMeasurements)) -parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndGraphValidationAndCallback + -> IO (Either ParseExecutionError ParsedSourceWorkspace) +parseSourceWorkspaceWithStoreAndSyntaxInputsAndGraphValidationAndCallback store mounts request syntaxInputs validateGraph emitBlock = do - resolutionStart <- getMonotonicTimeNSec - graphResult <- buildResolvedSourceGraphMeasured mounts request - resolutionEnd <- getMonotonicTimeNSec + graphResult <- buildResolvedSourceGraph mounts request case graphResult of Left err -> pure (Left (ParseExecutionWorkspaceError (SourceWorkspaceError err))) - Right (graph, selectionMeasurements) -> + Right graph -> case validateGraph graph of Left err -> pure @@ -1251,108 +1167,34 @@ parseSourceWorkspaceMeasuredWithStoreAndSyntaxInputsAndGraphValidationAndCallbac (ParseExecutionWorkspaceError (SourceWorkspaceError err))) Right () -> - fmap - (fmap - (\(workspace, measurements) -> - ( workspace - , withResolutionMeasurements - measurements - (resolutionEnd - resolutionStart) - selectionMeasurements - ))) - (parseResolvedSourceGraphMeasuredWithArtifacts - (PersistentParsedArtifacts store) - graph - syntaxInputs - emitBlock) - --- | Resolve, strictly load, and parse one source closure with a block --- callback. --- --- The callback may perform arbitrary I/O. It runs in deterministic source and --- chunk order, and callbacks for earlier blocks may have completed when a --- later parse fails. Callback exceptions propagate to the caller. -parseSourceWorkspaceWith - :: SourceMounts - -> RootRequest - -> (ResolvedSource -> Raw.Block -> IO ()) - -> IO (Either ParseWorkspaceError ParsedSourceWorkspace) -parseSourceWorkspaceWith mounts request emitBlock = do - fmap (fmap fst) - (parseSourceWorkspaceMeasuredWith - mounts - request - emitBlock) + parseResolvedSourceGraphWithArtifacts + (PersistentParsedArtifacts store) + graph + syntaxInputs + emitBlock -parseSourceWorkspaceMeasuredWith - :: SourceMounts - -> RootRequest - -> (ResolvedSource -> Raw.Block -> IO ()) - -> IO - (Either - ParseWorkspaceError - (ParsedSourceWorkspace, ParseMeasurements)) -parseSourceWorkspaceMeasuredWith mounts request emitBlock = do - parseSourceWorkspaceMeasuredWithSyntaxInputsAndCallback - mounts - request - (const []) - emitBlock - -parseSourceWorkspaceMeasuredWithSyntaxInputsAndCallback - :: SourceMounts - -> RootRequest - -> (ResolvedSource -> [ModuleSyntaxInterface]) - -> (ResolvedSource -> Raw.Block -> IO ()) - -> IO - (Either - ParseWorkspaceError - (ParsedSourceWorkspace, ParseMeasurements)) -parseSourceWorkspaceMeasuredWithSyntaxInputsAndCallback - mounts request syntaxInputs emitBlock = do - parseSourceWorkspaceMeasuredWithSyntaxInputsAndGraphValidationAndCallback - mounts request syntaxInputs (const (Right ())) emitBlock - -parseSourceWorkspaceMeasuredWithSyntaxInputsAndGraphValidationAndCallback +parseSourceWorkspaceWithSyntaxInputsAndGraphValidationAndCallback :: SourceMounts -> RootRequest -> (ResolvedSource -> [ModuleSyntaxInterface]) -> (ResolvedSourceGraph -> Either SourceError ()) -> (ResolvedSource -> Raw.Block -> IO ()) - -> IO - (Either - ParseWorkspaceError - (ParsedSourceWorkspace, ParseMeasurements)) -parseSourceWorkspaceMeasuredWithSyntaxInputsAndGraphValidationAndCallback + -> IO (Either ParseWorkspaceError ParsedSourceWorkspace) +parseSourceWorkspaceWithSyntaxInputsAndGraphValidationAndCallback mounts request syntaxInputs validateGraph emitBlock = do - resolutionStart <- getMonotonicTimeNSec - graphResult <- buildResolvedSourceGraphMeasured mounts request - resolutionEnd <- getMonotonicTimeNSec + graphResult <- buildResolvedSourceGraph mounts request case graphResult of Left err -> pure (Left (SourceWorkspaceError err)) - Right (graph, selectionMeasurements) -> + Right graph -> case validateGraph graph of Left err -> pure (Left (SourceWorkspaceError err)) Right () -> - fmap - (fmap - (\(workspace, measurements) -> - let - -- Resolution includes source loading and - -- import scanning for graph construction. - measured = - withResolutionMeasurements - measurements - (resolutionEnd - resolutionStart) - selectionMeasurements - in - (workspace, measured))) - (parseResolvedSourceGraphMeasuredWith - graph - syntaxInputs - emitBlock) + parseResolvedSourceGraphWithSyntaxInputs + graph + syntaxInputs + emitBlock parseResolvedSourceGraph :: ResolvedSourceGraph @@ -1372,23 +1214,40 @@ parseResolvedSourceGraphWith -> (ResolvedSource -> Raw.Block -> IO ()) -> IO (Either ParseWorkspaceError ParsedSourceWorkspace) parseResolvedSourceGraphWith graph emitBlock = - fmap (fmap fst) - (parseResolvedSourceGraphMeasuredWith - graph - (const []) - emitBlock) + parseResolvedSourceGraphWithSyntaxInputs + graph + (const []) + emitBlock -parseResolvedSourceGraphMeasuredWith +parseResolvedSourceGraphWithStoreAndSyntaxInputsAndGraphValidation + :: Store.Store + -> ResolvedSourceGraph + -> (ResolvedSource -> [ModuleSyntaxInterface]) + -> (ResolvedSourceGraph -> Either SourceError ()) + -> IO (Either ParseExecutionError ParsedSourceWorkspace) +parseResolvedSourceGraphWithStoreAndSyntaxInputsAndGraphValidation + store graph syntaxInputs validateGraph = + case validateGraph graph of + Left err -> + pure + (Left + (ParseExecutionWorkspaceError + (SourceWorkspaceError err))) + Right () -> + parseResolvedSourceGraphWithArtifacts + (PersistentParsedArtifacts store) + graph + syntaxInputs + (\_source _block -> pure ()) + +parseResolvedSourceGraphWithSyntaxInputs :: ResolvedSourceGraph -> (ResolvedSource -> [ModuleSyntaxInterface]) -> (ResolvedSource -> Raw.Block -> IO ()) - -> IO - (Either - ParseWorkspaceError - (ParsedSourceWorkspace, ParseMeasurements)) -parseResolvedSourceGraphMeasuredWith graph syntaxInputs emitBlock = + -> IO (Either ParseWorkspaceError ParsedSourceWorkspace) +parseResolvedSourceGraphWithSyntaxInputs graph syntaxInputs emitBlock = fmap unwrapUncachedExecution - (parseResolvedSourceGraphMeasuredWithArtifacts + (parseResolvedSourceGraphWithArtifacts UncachedParsedArtifacts graph syntaxInputs @@ -1411,16 +1270,13 @@ unwrapUncachedExecution = \case Right value -> Right value -parseResolvedSourceGraphMeasuredWithArtifacts +parseResolvedSourceGraphWithArtifacts :: ParsedArtifactAccess -> ResolvedSourceGraph -> (ResolvedSource -> [ModuleSyntaxInterface]) -> (ResolvedSource -> Raw.Block -> IO ()) - -> IO - (Either - ParseExecutionError - (ParsedSourceWorkspace, ParseMeasurements)) -parseResolvedSourceGraphMeasuredWithArtifacts + -> IO (Either ParseExecutionError ParsedSourceWorkspace) +parseResolvedSourceGraphWithArtifacts artifactAccess graph syntaxInputs emitBlock = runExceptT do let orderedNodes = @@ -1449,61 +1305,17 @@ parseResolvedSourceGraphMeasuredWithArtifacts (SourceWorkspaceError (SourceGraphInvariantViolation "source graph produced no parsed modules"))) - let measurements = - ParseMeasurements - { parseMeasurementResolutionNanoseconds = - 0 - , parseMeasurementTokenizationNanoseconds = - moduleParseTokenizationNanoseconds completed - , parseMeasurementScanningNanoseconds = - moduleParseScanningNanoseconds completed - , parseMeasurementSyntaxInterfaceNanoseconds = - moduleParseSyntaxNanoseconds completed - , parseMeasurementParsingNanoseconds = - moduleParseParsingNanoseconds completed - , parseMeasurementParsedHitCount = - moduleParseHitCount completed - , parseMeasurementParsedMissCount = - moduleParseMissCount completed - , parseMeasurementParserTableMaterializationCount = - moduleParseParserTableCount completed - , parseMeasurementModuleCount = - NonEmpty.length orderedNodes - , parseMeasurementImportOccurrenceCount = - length (sourceGraphImportEdges graph) - , parseMeasurementChunkCount = - moduleParseChunkCount completed - , parseMeasurementSourceByteCount = - sum - (loadedByteCount - . sourceNodeLoaded - <$> NonEmpty.toList orderedNodes) - , parseMeasurementCandidateProbeCount = 0 - , parseMeasurementCanonicalizationCount = 0 - , parseMeasurementTargetInspectionCount = 0 - } - pure - ( ParsedSourceWorkspace parsedModules - , measurements - ) + pure (ParsedSourceWorkspace parsedModules) data ModuleParseState = ModuleParseState { moduleParsePrepared :: !(Map ResolvedSourceAddress PreparedSyntaxModule) , moduleParseReversed :: ![ParsedModule] - , moduleParseTokenizationNanoseconds :: !Word64 - , moduleParseScanningNanoseconds :: !Word64 - , moduleParseSyntaxNanoseconds :: !Word64 - , moduleParseParsingNanoseconds :: !Word64 - , moduleParseChunkCount :: !Int - , moduleParseHitCount :: !Int - , moduleParseMissCount :: !Int - , moduleParseParserTableCount :: !Int } emptyModuleParseState :: ModuleParseState emptyModuleParseState = - ModuleParseState Map.empty [] 0 0 0 0 0 0 0 0 + ModuleParseState Map.empty [] parseOneModule :: ParsedArtifactAccess @@ -1568,25 +1380,17 @@ parseAndPublishFreshModule -> ExceptT ParseExecutionError IO ModuleParseState parseAndPublishFreshModule artifactAccess emitBlock moduleIndex node imports context expectedKey state = do - tokenizationStart <- liftIO getMonotonicTimeNSec tokenized <- withExceptT ParseExecutionWorkspaceError (ExceptT (tokenizeModule node imports)) - tokenizationEnd <- liftIO getMonotonicTimeNSec - scanningStart <- liftIO getMonotonicTimeNSec scanned <- withExceptT ParseExecutionWorkspaceError (scanTokenizedModule tokenized) - scanningEnd <- liftIO getMonotonicTimeNSec - syntaxStart <- liftIO getMonotonicTimeNSec runtime <- liftWorkspaceEither (prepareFreshRuntimeSyntaxModule moduleIndex context scanned) - syntaxEnd <- liftIO getMonotonicTimeNSec - parsingStart <- liftIO getMonotonicTimeNSec parsed <- withExceptT ParseExecutionWorkspaceError (parseScannedModule emitBlock runtime scanned) - parsingEnd <- liftIO getMonotonicTimeNSec unless (parsedModuleKey parsed == expectedKey) (throwE @@ -1635,25 +1439,6 @@ parseAndPublishFreshModule artifactAccess emitBlock moduleIndex node imports Map.insert address prepared (moduleParsePrepared state) , moduleParseReversed = parsed : moduleParseReversed state - , moduleParseTokenizationNanoseconds = - moduleParseTokenizationNanoseconds state - + tokenizationEnd - tokenizationStart - , moduleParseScanningNanoseconds = - moduleParseScanningNanoseconds state - + scanningEnd - scanningStart - , moduleParseSyntaxNanoseconds = - moduleParseSyntaxNanoseconds state - + syntaxEnd - syntaxStart - , moduleParseParsingNanoseconds = - moduleParseParsingNanoseconds state - + parsingEnd - parsingStart - , moduleParseChunkCount = - moduleParseChunkCount state - + tokenizedModuleChunkCount tokenized - , moduleParseMissCount = - moduleParseMissCount state + 1 - , moduleParseParserTableCount = - moduleParseParserTableCount state + 1 } liftWorkspaceEither @@ -1674,7 +1459,6 @@ installCachedModule -> ExceptT ParseExecutionError IO ModuleParseState installCachedModule emitBlock moduleIndex node imports context key artifact state = do - syntaxStart <- liftIO getMonotonicTimeNSec let source = sourceNodeResolved node loaded = sourceNodeLoaded node payload = Parsed.parsedArtifactPayload artifact @@ -1726,7 +1510,6 @@ installCachedModule emitBlock moduleIndex node imports context key artifact (Parsed.parsedArtifactId artifact) parsed = ParsedModule loaded imports identified forced <- liftIO (evaluate (force parsed)) - syntaxEnd <- liftIO getMonotonicTimeNSec liftIO (forM_ (parsedModuleBlocks forced) @@ -1745,14 +1528,6 @@ installCachedModule emitBlock moduleIndex node imports context key artifact Map.insert address prepared (moduleParsePrepared state) , moduleParseReversed = forced : moduleParseReversed state - , moduleParseSyntaxNanoseconds = - moduleParseSyntaxNanoseconds state - + syntaxEnd - syntaxStart - , moduleParseChunkCount = - moduleParseChunkCount state - + length (Parsed.decodedParsedBlocks decoded) - , moduleParseHitCount = - moduleParseHitCount state + 1 } throwIntegrity @@ -1933,33 +1708,6 @@ classifyCachedSyntaxItem importedEntries importedIndex site entry = _ -> Right (EmitSyntaxEntry entry) -withResolutionMeasurements - :: ParseMeasurements - -> Word64 - -> SourceSelectionMeasurements - -> ParseMeasurements -withResolutionMeasurements - measurements - resolution - selectionMeasurements = - measurements - { parseMeasurementResolutionNanoseconds = - resolution - , parseMeasurementCandidateProbeCount = - sourceSelectionCandidateProbeCount selectionMeasurements - , parseMeasurementCanonicalizationCount = - sourceSelectionCanonicalizationCount - selectionMeasurements - , parseMeasurementTargetInspectionCount = - sourceSelectionTargetInspectionCount - selectionMeasurements - } - -tokenizedModuleChunkCount :: TokenizedModule -> Int -tokenizedModuleChunkCount - (TokenizedModule _node _imports _pragmas chunks) = - length chunks - tokenizeModule :: SourceNode -> [ParsedModuleImport] |
