Analysed by SourceGraph (version 0.7.0.0) using Graphalyze (version 0.11.0.0)
Wednesday 24 November, 2010







Please note that the source-code analysis in this document is not necessarily perfect: SourceGraph is not a refactoring tool, and it's usage of Classes is still premature.
Implicitly exported entities refer to class methods that are instantiated but defined elsewhere, or entities whose names start with an underscore . Note that even for Main modules, these implicit exports are included.
All graph visualisations link to larger SVG versions of the same graph.
The following source files were unable to be parsed; this may result in some analysis failures:
graphviz/Data/GraphViz/Commands.hs
graphviz/Data/GraphViz/Types.hs
graphviz/Data/GraphViz/Testing/Properties.hs
graphviz/utils/TestParsing.hs
Here is the current module grouping of functions:
Here is a proposed alternate module grouping:
Using the Chinese Whispers algorithm:
The core of software is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The overall cyclomatic complexity is: 8751
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
These functions are those that are inaccessible:
Data.GraphViz.AttributeGenerator.A, Data.GraphViz.AttributeGenerator.AS, Data.GraphViz.AttributeGenerator.Bl, Data.GraphViz.AttributeGenerator.Cust, Data.GraphViz.AttributeGenerator.Dbl, Data.GraphViz.AttributeGenerator.EStrng, Data.GraphViz.AttributeGenerator.Integ, Data.GraphViz.AttributeGenerator.Strng, Data.GraphViz.AttributeGenerator.arbitraryFor, Data.GraphViz.AttributeGenerator.arbitraryFor', Data.GraphViz.AttributeGenerator.arbitraryInstance, Data.GraphViz.AttributeGenerator.asRows, Data.GraphViz.AttributeGenerator.attributes, Data.GraphViz.AttributeGenerator.attrs, Data.GraphViz.AttributeGenerator.attrs', Data.GraphViz.AttributeGenerator.atts, Data.GraphViz.AttributeGenerator.bool, Data.GraphViz.AttributeGenerator.cnst, Data.GraphViz.AttributeGenerator.comment, Data.GraphViz.AttributeGenerator.createAlias, Data.GraphViz.AttributeGenerator.createDefn, Data.GraphViz.AttributeGenerator.docLen, Data.GraphViz.AttributeGenerator.docList, Data.GraphViz.AttributeGenerator.dollar, Data.GraphViz.AttributeGenerator.dot, Data.GraphViz.AttributeGenerator.firstOthers, Data.GraphViz.AttributeGenerator.forClusters, Data.GraphViz.AttributeGenerator.forEdges, Data.GraphViz.AttributeGenerator.forGraphs, Data.GraphViz.AttributeGenerator.forNodes, Data.GraphViz.AttributeGenerator.forSubGraphs, Data.GraphViz.AttributeGenerator.genArbitrary, Data.GraphViz.AttributeGenerator.genCode, Data.GraphViz.AttributeGenerator.main, Data.GraphViz.AttributeGenerator.makeAttr, Data.GraphViz.AttributeGenerator.name, Data.GraphViz.AttributeGenerator.parseDef, Data.GraphViz.AttributeGenerator.parseInstance, Data.GraphViz.AttributeGenerator.parseNames, Data.GraphViz.AttributeGenerator.sameAttributeFunc, Data.GraphViz.AttributeGenerator.showInstance, Data.GraphViz.AttributeGenerator.shrinkFor, Data.GraphViz.AttributeGenerator.tab, Data.GraphViz.AttributeGenerator.tpNm, Data.GraphViz.AttributeGenerator.unknownAttr, Data.GraphViz.AttributeGenerator.usedByFunc, Data.GraphViz.AttributeGenerator.valtype, Data.GraphViz.AttributeGenerator.vsep, Data.GraphViz.AttributeGenerator.vtype, Data.GraphViz.AttributeGenerator.vtypeCode, Data.GraphViz.AttributeGenerator.wrap, Data.GraphViz.Testing.Test, Data.GraphViz.Testing.blankLn, Data.GraphViz.Testing.defaultTests, Data.GraphViz.Testing.desc, Data.GraphViz.Testing.die, Data.GraphViz.Testing.lookupName, Data.GraphViz.Testing.name, Data.GraphViz.Testing.runChosenTests, Data.GraphViz.Testing.runTest, Data.GraphViz.Testing.runTests, Data.GraphViz.Testing.spacerLn, Data.GraphViz.Testing.test, Data.GraphViz.Testing.test_dotizeAugment, Data.GraphViz.Testing.test_dotizeAugmentUniq, Data.GraphViz.Testing.test_findAllEdges, Data.GraphViz.Testing.test_findAllEdgesG, Data.GraphViz.Testing.test_findAllNodes, Data.GraphViz.Testing.test_findAllNodesE, Data.GraphViz.Testing.test_findAllNodesEG, Data.GraphViz.Testing.test_findAllNodesG, Data.GraphViz.Testing.test_generalisedSameDot, Data.GraphViz.Testing.test_noGraphInfo, Data.GraphViz.Testing.test_noGraphInfoG, Data.GraphViz.Testing.test_parsePrettyID, Data.GraphViz.Testing.test_preProcessingID, Data.GraphViz.Testing.test_printParseGID, Data.GraphViz.Testing.test_printParseID, Data.GraphViz.Testing.test_printParseID_Attributes, Data.GraphViz.Types.Common.EdgeError, Data.GraphViz.Types.Common.GraphError, Data.GraphViz.Types.Common.NodeError, Data.GraphViz.Types.Common.invalidEdge, Data.GraphViz.Types.Common.invalidGlobal, Data.GraphViz.Types.Common.invalidNode, Data.GraphViz.Types.State.toDotNodes, Data.GraphViz.Util.descapeQuotes, Data.GraphViz.Util.escapeQuotes, Data.GraphViz.Util.isSingle, Main.dg
The functions are split up into 6 components. You may wish to consider splitting the code up into multiple libraries.
The cyclomatic complexity of the imports is: 35
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
These modules are those that are inaccessible:
Data.GraphViz.AttributeGenerator, Data.GraphViz.Testing, Data.GraphViz.Testing.Instances, Data.GraphViz.Testing.Instances.FGL, Main
The imports have 2 components. You may wish to consider splitting the code up.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz is: 35.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz has 2 components. You may wish to consider splitting it up.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.AttributeGenerator is: 396.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
These functions are those that are inaccessible:
attrs, attrs', bool
The module Data.GraphViz.AttributeGenerator has 2 components. You may wish to consider splitting it up.
The module Data.GraphViz.AttributeGenerator has the following chains:
asRows -> docLen
genArbitrary -> arbitraryInstance
These chains can all be compressed down to a single function.
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Attributes is: 1760.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Attributes.Colors is: 2936.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Attributes.Colors has the following chains:
hexColor -> word8Doc
These chains can all be compressed down to a single function.
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Attributes.HTML is: 254.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Attributes.Internal is: 72.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Parsing is: 74.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Parsing has 2 components. You may wish to consider splitting it up.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.PreProcessing is: 4.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.PreProcessing has the following chains:
preProcess -> parseOutUnwanted
These chains can all be compressed down to a single function.
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Printing is: 20.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Printing has 3 components. You may wish to consider splitting it up.
The module Data.GraphViz.Printing has the following chains:
addQuotes -> needsQuotes
These chains can all be compressed down to a single function.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Testing is: 87.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Testing.Instances is: 812.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Testing.Instances has the following cliques:
arbHtmlText, arbHtmlTexts
The module Data.GraphViz.Testing.Instances has the following chains:
arbHtmlTexts -> simplifyHtmlText
These chains can all be compressed down to a single function.
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Testing.Instances.FGL is: 5.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Testing.Instances.FGL has the following chains:
Class: Arbitrary, Data: (g n e) -> Class: Arbitrary
These chains can all be compressed down to a single function.
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Types.Clustering is: 25.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Types.Clustering has the following cliques:
treeToDot, treesToDot
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Types.Common is: 126.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Types.Common has 3 components. You may wish to consider splitting it up.
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Types.Generalised is: 120.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Types.Generalised has the following cliques:
generaliseStatements, generaliseSubGraph
statementEdges, stmtEdges
statementNodes, stmtNodes
statementStructure, stmtStructure
The module Data.GraphViz.Types.Generalised has the following chains:
statementEdges -> stmtEdges
statementNodes -> stmtNodes
statementStructure -> stmtStructure
These chains can all be compressed down to a single function.
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Types.State is: 40.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Types.State has 2 components. You may wish to consider splitting it up.
The module Data.GraphViz.Types.State has the following chains:
mergeCInfos -> append
These chains can all be compressed down to a single function.
The core of a module is calculated by recursively removing roots and leaves of the call graph; as such, it can be considered as the section where all the "real work" is done.
Visualises how far away from the exported root entities an entity is.
The cyclomatic complexity of Data.GraphViz.Util is: 14.
For more information on cyclomatic complexity, please see: Wikipedia: Cyclomatic Complexity
The module Data.GraphViz.Util has 9 components. You may wish to consider splitting it up.