Skip to content

Latest commit

 

History

History
1705 lines (1330 loc) · 124 KB

File metadata and controls

1705 lines (1330 loc) · 124 KB

Metrics

Home

Static metrics are calculated from target-specific preprocessed MiniLang files inside the configured source roots. External imported modules, generated documentation, and excluded paths are not measured.

Project summary

Metric Value
Blank lines 401
Clone groups 89
Cognitive complexity 2900 (maximum per function: 108)
Comment lines 817
Cyclomatic complexity 1986 (average: 7.14, maximum: 54)
Documentation coverage 100% (69 of 69 documentation items)
Duplicated lines 476 (9.11%)
Files 13
Functions 278
Maintainability index 2.98 / 100
Physical lines 6443
Source lines 5225
Statements 4237

Documentation coverage

Coverage is split by documentation contract so strong API summaries cannot hide undocumented parameters or data members.

Category Documented Total Coverage
API declarations 30 30 100%
Constants 0 0 100%
Enum variants 0 0 100%
Fields 0 0 100%
Globals 0 0 100%
Overall 69 69 100%
Parameters 39 39 100%

Halstead metrics

Distinct operators Distinct operands Total operators Total operands Vocabulary Length Volume Difficulty Effort Estimated defects
40 2063 26399 19693 2103 46092 508774.24 190.92 97133215.13 169.59

Files

File SLOC Functions Cyclomatic total / avg / max Cognitive total / max Duplication Halstead volume MI
src/main.ml 4 1 1 / 1 / 1 0 / 0 0 (0%) 74.01 73.64
src/minidoc/analyzer.ml 842 41 382 / 9.32 / 30 576 / 59 14 (1.66%) 78925.63 0
src/minidoc/app.ml 160 10 53 / 5.3 / 13 49 / 12 0 (0%) 7953.14 17.48
src/minidoc/config.ml 374 18 216 / 12 / 54 357 / 108 0 (0%) 30321.89 0
src/minidoc/doc_comments.ml 262 11 88 / 8 / 22 118 / 39 0 (0%) 14954.39 6.18
src/minidoc/graph.ml 259 11 88 / 8 / 33 140 / 66 20 (7.72%) 15986.11 6.09
src/minidoc/loader.ml 257 14 104 / 7.43 / 19 151 / 32 0 (0%) 18893.45 3.5
src/minidoc/metrics.ml 762 37 241 / 6.51 / 35 367 / 86 7 (0.92%) 48698.62 0
src/minidoc/model.ml 300 6 6 / 1 / 1 0 / 0 23 (7.67%) 6318.46 18.55
src/minidoc/ordering.ml 159 12 50 / 4.17 / 12 61 / 27 12 (7.55%) 8708.94 17.67
src/minidoc/render_html.ml 709 41 288 / 7.02 / 43 441 / 80 188 (26.52%) 73437.94 0
src/minidoc/render_markdown.ml 723 39 277 / 7.1 / 38 422 / 71 204 (28.22%) 66566.77 0
src/minidoc/util.ml 414 37 192 / 5.19 / 24 218 / 42 8 (1.93%) 26330 0

Functions

Function Location LOC Statements Cyclomatic Cognitive Max nesting Halstead volume MI
main src/main.ml:18 3 1 1 0 0 46.51 77.78
minidoc.analyzer._addEnum src/minidoc/analyzer.ml:721 24 21 5 7 3 1786.26 46.45
minidoc.analyzer._addExternFunction src/minidoc/analyzer.ml:626 22 21 7 9 3 1805.65 46.97
minidoc.analyzer._addFunction src/minidoc/analyzer.ml:562 29 30 9 8 1 1881.69 43.96
minidoc.analyzer._addInterface src/minidoc/analyzer.ml:700 18 14 5 10 4 1327.35 50.08
minidoc.analyzer._addStruct src/minidoc/analyzer.ml:651 44 43 20 34 4 3670.57 36.5
minidoc.analyzer._addSymbol src/minidoc/analyzer.ml:175 47 18 7 10 3 1812.59 39.77
minidoc.analyzer._aliasTargetPackage src/minidoc/analyzer.ml:818 13 12 7 9 3 563.52 55.5
minidoc.analyzer._calleeName src/minidoc/analyzer.ml:448 10 9 5 5 2 324.33 59.93
minidoc.analyzer._diagnostic src/minidoc/analyzer.ml:141 4 2 1 0 0 317.29 69.22
minidoc.analyzer._fileById src/minidoc/analyzer.ml:148 7 6 4 4 2 279.68 63.9
minidoc.analyzer._findWord src/minidoc/analyzer.ml:116 22 20 10 13 2 1294.51 47.58
minidoc.analyzer._functionParameters src/minidoc/analyzer.ml:333 20 21 13 18 3 1404.19 47.83
minidoc.analyzer._functionSignature src/minidoc/analyzer.ml:372 17 19 9 8 1 826.57 51.52
minidoc.analyzer._insideDocumentation src/minidoc/analyzer.ml:106 7 6 6 6 2 335.77 63.07
minidoc.analyzer._isPositiveDecimal src/minidoc/analyzer.ml:239 10 9 6 6 2 413.59 59.06
minidoc.analyzer._isTestRoleTag src/minidoc/analyzer.ml:233 3 1 1 0 0 102.8 75.37
minidoc.analyzer._operatorQualifiedName src/minidoc/analyzer.ml:434 11 8 4 6 3 442.8 58.22
minidoc.analyzer._operatorSignature src/minidoc/analyzer.ml:423 8 8 3 2 1 375 61.87
minidoc.analyzer._operatorSourceSymbol src/minidoc/analyzer.ml:392 28 5 3 3 2 1022.11 46.96
minidoc.analyzer._parameterSignaturePieces src/minidoc/analyzer.ml:356 13 14 6 8 2 529.1 55.82
minidoc.analyzer._qualified src/minidoc/analyzer.ml:23 5 5 3 2 1 128.93 69.57
minidoc.analyzer._resolveCalls src/minidoc/analyzer.ml:834 33 32 15 25 3 2523.26 41.04
minidoc.analyzer._resolveTypeRelations src/minidoc/analyzer.ml:870 14 16 10 13 2 1032.38 52.55
minidoc.analyzer._resolveUnique src/minidoc/analyzer.ml:797 18 16 8 12 3 675.88 51.73
minidoc.analyzer._scope src/minidoc/analyzer.ml:31 3 1 1 0 0 53.15 77.38
minidoc.analyzer._summaryQualityEligible src/minidoc/analyzer.ml:933 7 8 4 3 1 447.7 62.46
minidoc.analyzer._symbolById src/minidoc/analyzer.ml:158 7 6 4 4 2 279.68 63.9
minidoc.analyzer._symbolId src/minidoc/analyzer.ml:168 4 2 1 0 0 165.67 71.19
minidoc.analyzer._typeName src/minidoc/analyzer.ml:37 6 6 4 3 1 180.09 66.69
minidoc.analyzer._validateCoverage src/minidoc/analyzer.ml:887 12 10 8 10 3 928.85 54.6
minidoc.analyzer._validateFunctionDoc src/minidoc/analyzer.ml:289 40 34 21 49 6 2579.35 38.34
minidoc.analyzer._validateSummaryQuality src/minidoc/analyzer.ml:943 26 25 10 13 2 1765.23 45.05
minidoc.analyzer._validateTestFixtureUniqueness src/minidoc/analyzer.ml:902 28 28 15 42 6 1447.13 44.28
minidoc.analyzer._validateTestTags src/minidoc/analyzer.ml:252 33 29 29 38 3 2563.32 39.11
minidoc.analyzer._walkDeclarations src/minidoc/analyzer.ml:748 46 38 19 37 4 3338.5 36.5
minidoc.analyzer._walkExpression src/minidoc/analyzer.ml:461 35 25 19 25 3 2617.2 39.83
minidoc.analyzer._walkNested src/minidoc/analyzer.ml:596 27 17 16 29 4 1586.55 44.21
minidoc.analyzer._walkStatementsForCalls src/minidoc/analyzer.ml:499 60 44 28 59 6 4092.39 32.15
minidoc.analyzer._warningScopeIncludes src/minidoc/analyzer.ml:225 5 5 3 2 1 124 69.69
minidoc.analyzer.analyze src/minidoc/analyzer.ml:973 16 12 3 3 2 531.36 54.25
minidoc.analyzer.expressionText src/minidoc/analyzer.ml:47 54 59 30 41 4 3687.58 33.2
minidoc.app._countSeverity src/minidoc/app.ml:137 8 7 4 4 2 291.43 62.51
minidoc.app._generationTimestamp src/minidoc/app.ml:105 9 11 5 4 1 433.82 60.05
minidoc.app._hasArg src/minidoc/app.ml:117 7 6 5 5 2 264.4 63.93
minidoc.app._printDiagnostics src/minidoc/app.ml:127 7 5 3 2 1 391.73 63.01
minidoc.app._sourceDateEpochTimestamp src/minidoc/app.ml:82 18 15 11 12 2 934.87 50.34
minidoc.app.generate src/minidoc/app.ml:149 15 16 4 3 1 630.55 54.2
minidoc.app.printHelp src/minidoc/app.ml:38 39 37 1 0 0 455.81 46.54
minidoc.app.printVersion src/minidoc/app.ml:32 3 1 1 0 0 31.7 78.95
minidoc.app.render src/minidoc/app.ml:168 12 11 6 7 2 471.12 56.93
minidoc.app.run src/minidoc/app.ml:184 30 30 13 12 1 1335.36 44.14
minidoc.config._absoluteItems src/minidoc/config.ml:174 8 6 3 2 1 271.03 62.86
minidoc.config._applyCli src/minidoc/config.ml:348 68 60 54 102 3 4573.06 27.13
minidoc.config._applyFormats src/minidoc/config.ml:313 14 15 6 7 2 678.28 54.37
minidoc.config._applyGraphSelection src/minidoc/config.ml:330 15 12 5 7 2 587.76 54.28
minidoc.config._applyMiniDoc src/minidoc/config.ml:234 65 55 41 108 3 5600.49 28.69
minidoc.config._applyProject src/minidoc/config.ml:200 30 21 18 34 4 1612.65 42.9
minidoc.config._argValue src/minidoc/config.ml:303 7 6 4 4 2 278.83 63.9
minidoc.config._boolean src/minidoc/config.ml:88 6 6 3 2 1 203.56 66.46
minidoc.config._integer src/minidoc/config.ml:97 19 18 8 8 2 760.77 50.85
minidoc.config._manifestFromConfig src/minidoc/config.ml:185 12 9 5 5 2 461.82 57.13
minidoc.config._rowArray src/minidoc/config.ml:150 5 4 2 1 1 239.72 67.82
minidoc.config._rowBool src/minidoc/config.ml:158 5 4 2 1 1 239.72 67.82
minidoc.config._rowInt src/minidoc/config.ml:166 5 4 2 1 1 239.72 67.82
minidoc.config._rows src/minidoc/config.ml:119 20 18 8 10 2 1388.3 48.54
minidoc.config._rowString src/minidoc/config.ml:142 5 4 2 1 1 239.72 67.82
minidoc.config._stringArray src/minidoc/config.ml:44 41 34 19 32 3 1772.51 39.52
minidoc.config._unquote src/minidoc/config.ml:31 10 7 4 3 1 470 58.94
minidoc.config.load src/minidoc/config.ml:421 28 44 30 29 1 2748.45 40.32
minidoc.doc_comments._cleanBlockLine src/minidoc/doc_comments.ml:30 9 6 3 2 1 309.07 61.35
minidoc.doc_comments._finishPending src/minidoc/doc_comments.ml:126 4 3 2 1 1 209.59 70.34
minidoc.doc_comments._firstWord src/minidoc/doc_comments.ml:42 12 11 5 4 1 549.84 56.6
minidoc.doc_comments._parseBlock src/minidoc/doc_comments.ml:81 40 33 16 28 4 2217.46 39.47
minidoc.doc_comments._stripOneSpace src/minidoc/doc_comments.ml:21 6 3 3 2 1 189.99 66.67
minidoc.doc_comments._summaryAndDetails src/minidoc/doc_comments.ml:57 21 16 6 9 3 753.4 50.21
minidoc.doc_comments.documentationBefore src/minidoc/doc_comments.ml:288 16 15 10 11 2 752.38 52.25
minidoc.doc_comments.fileDocumentation src/minidoc/doc_comments.ml:256 26 25 7 8 2 1150.98 46.76
minidoc.doc_comments.hasTag src/minidoc/doc_comments.ml:324 8 7 6 6 2 403.55 61.25
minidoc.doc_comments.scan src/minidoc/doc_comments.ml:137 107 87 22 39 3 4621.17 27.11
minidoc.doc_comments.tagText src/minidoc/doc_comments.ml:310 9 8 8 8 2 511.82 59.14
minidoc.graph._addNode src/minidoc/graph.ml:122 5 5 4 3 1 269.34 67.2
minidoc.graph._entityOwned src/minidoc/graph.ml:67 16 11 8 13 3 728.36 52.62
minidoc.graph._entityPackage src/minidoc/graph.ml:45 19 13 9 20 4 701.69 50.97
minidoc.graph._hasEdge src/minidoc/graph.ml:130 7 6 5 5 2 296.13 63.59
minidoc.graph._nodeIndex src/minidoc/graph.ml:112 7 6 4 4 2 235.23 64.42
minidoc.graph._relationVisible src/minidoc/graph.ml:86 8 9 4 3 1 351.86 61.93
minidoc.graph._shortLabel src/minidoc/graph.ml:140 4 3 2 1 1 159.91 71.17
minidoc.graph._sortNodes src/minidoc/graph.ml:147 16 12 4 4 2 515.24 54.21
minidoc.graph._symbolLabel src/minidoc/graph.ml:29 13 9 7 12 3 533.62 55.66
minidoc.graph.hasRelations src/minidoc/graph.ml:99 10 10 8 9 2 558.8 57.87
minidoc.graph.renderSvg src/minidoc/graph.ml:169 145 148 33 66 4 8606.15 20.86
minidoc.loader._collectTree src/minidoc/loader.ml:70 22 22 10 12 2 1368.97 47.41
minidoc.loader._diagnostic src/minidoc/loader.ml:41 7 7 3 2 1 506.65 62.22
minidoc.loader._fileId src/minidoc/loader.ml:124 4 2 1 0 0 114.45 72.32
minidoc.loader._findFile src/minidoc/loader.ml:131 7 6 4 4 2 310.23 63.58
minidoc.loader._hasLicenseHeader src/minidoc/loader.ml:30 8 9 4 3 1 479.22 60.99
minidoc.loader._isExcluded src/minidoc/loader.ml:51 16 17 10 14 3 1049.97 51.23
minidoc.loader._isReachable src/minidoc/loader.ml:217 3 1 1 0 0 85.11 75.94
minidoc.loader._loadImports src/minidoc/loader.ml:232 35 35 14 25 3 2307.18 40.89
minidoc.loader._markReachable src/minidoc/loader.ml:223 6 5 4 4 2 317.29 64.97
minidoc.loader._parseFile src/minidoc/loader.ml:167 45 37 15 24 4 2704.76 37.89
minidoc.loader._programPackage src/minidoc/loader.ml:113 8 7 5 5 2 312.11 62.16
minidoc.loader._resolveImport src/minidoc/loader.ml:141 23 20 9 21 5 983.19 48.13
minidoc.loader.discover src/minidoc/loader.ml:96 14 14 5 5 2 599.09 54.88
minidoc.loader.loadProject src/minidoc/loader.ml:271 50 46 19 32 4 2699.46 36.36
minidoc.metrics._accumulateHalstead src/minidoc/metrics.ml:111 20 15 12 16 3 820.99 49.6
minidoc.metrics._appendFunctionAndNested src/minidoc/metrics.ml:553 4 2 1 0 0 179.85 70.94
minidoc.metrics._appendFunctionMetric src/minidoc/metrics.ml:487 31 15 6 8 3 1295.01 44.87
minidoc.metrics._booleanOperators src/minidoc/metrics.ml:280 34 32 19 25 3 1726.54 41.37
minidoc.metrics._calculateDuplicates src/minidoc/metrics.ml:614 55 43 9 24 6 2663.86 36.84
minidoc.metrics._collectFunctions src/minidoc/metrics.ml:560 17 12 10 17 4 879.05 51.2
minidoc.metrics._commentFlags src/minidoc/metrics.ml:190 55 53 22 36 3 1826.52 36.24
minidoc.metrics._complexity src/minidoc/metrics.ml:378 4 2 1 0 0 106.61 72.53
minidoc.metrics._coverageMetric src/minidoc/metrics.ml:724 5 4 2 1 1 180.94 68.68
minidoc.metrics._duplicatedLineCount src/minidoc/metrics.ml:672 9 7 3 3 2 217.13 62.42
minidoc.metrics._findFunctionSymbol src/minidoc/metrics.ml:385 9 8 6 6 2 484.48 59.57
minidoc.metrics._finishHalstead src/minidoc/metrics.ml:134 24 11 4 3 1 729.46 49.31
minidoc.metrics._functionEndLine src/minidoc/metrics.ml:421 15 13 9 12 3 609.51 53.63
minidoc.metrics._functionTotals src/minidoc/metrics.ml:684 21 20 6 12 3 692.77 50.46
minidoc.metrics._halstead src/minidoc/metrics.ml:161 3 1 1 0 0 65.73 76.73
minidoc.metrics._isDocumentable src/minidoc/metrics.ml:708 5 4 2 1 1 245.34 67.75
minidoc.metrics._isDocumentableCallable src/minidoc/metrics.ml:716 5 4 2 1 1 197.42 68.41
minidoc.metrics._isMeasuredFile src/minidoc/metrics.ml:732 3 1 1 0 0 120 74.9
minidoc.metrics._maintainability src/minidoc/metrics.ml:475 9 11 5 4 1 459.04 59.87
minidoc.metrics._markWindow src/minidoc/metrics.ml:590 7 4 3 2 1 205.13 64.97
minidoc.metrics._newHalsteadAccumulator src/minidoc/metrics.ml:83 3 1 1 0 0 118.03 74.95
minidoc.metrics._normalizedLines src/minidoc/metrics.ml:167 20 18 8 9 2 1105.89 49.23
minidoc.metrics._recordOperand src/minidoc/metrics.ml:100 8 5 2 1 1 279.68 62.9
minidoc.metrics._recordOperator src/minidoc/metrics.ml:89 8 5 2 1 1 279.68 62.9
minidoc.metrics._round2 src/minidoc/metrics.ml:68 3 1 1 0 0 66.61 76.69
minidoc.metrics._sourceData src/minidoc/metrics.ml:248 29 16 7 13 3 905.86 46.45
minidoc.metrics._sourceDataById src/minidoc/metrics.ml:580 7 6 4 4 2 239.75 64.36
minidoc.metrics._sourceLines src/minidoc/metrics.ml:439 14 10 7 9 3 598.26 54.61
minidoc.metrics._sourceSlice src/minidoc/metrics.ml:456 16 17 6 5 1 691.85 53.04
minidoc.metrics._startsFunction src/minidoc/metrics.ml:397 9 4 4 3 1 446.93 60.09
minidoc.metrics._startsOperator src/minidoc/metrics.ml:414 4 2 1 0 0 165.67 71.19
minidoc.metrics._tokenValue src/minidoc/metrics.ml:74 6 5 2 1 1 284.6 65.57
minidoc.metrics._touchNesting src/minidoc/metrics.ml:317 4 3 2 1 1 97.67 72.67
minidoc.metrics._walkComplexity src/minidoc/metrics.ml:324 51 41 16 31 4 2786.56 36.48
minidoc.metrics._walkNestedFunctions src/minidoc/metrics.ml:521 29 19 16 29 4 1681.63 43.36
minidoc.metrics._windowFingerprint src/minidoc/metrics.ml:600 11 9 3 3 2 346.79 59.09
minidoc.metrics.calculate src/minidoc/metrics.ml:739 169 122 35 86 5 8063.63 19.34
minidoc.model.defaultConfig src/minidoc/model.ml:320 37 1 1 0 0 437.22 47.17
minidoc.model.emptyDocBlock src/minidoc/model.ml:360 3 1 1 0 0 121.84 74.85
minidoc.model.emptyHalsteadMetrics src/minidoc/model.ml:386 3 1 1 0 0 96.34 75.57
minidoc.model.emptyProject src/minidoc/model.ml:380 3 1 1 0 0 168 73.88
minidoc.model.emptyProjectMetrics src/minidoc/model.ml:392 5 3 1 0 0 397.62 66.42
minidoc.model.newDiagnostic src/minidoc/model.ml:372 3 1 1 0 0 121.84 74.85
minidoc.ordering._entityName src/minidoc/ordering.ml:123 13 9 7 12 3 533.62 55.66
minidoc.ordering._sortCloneGroups src/minidoc/ordering.ml:184 9 7 3 2 1 529.66 59.71
minidoc.ordering._sortDiagnostics src/minidoc/ordering.ml:112 8 6 3 2 1 493.48 61.04
minidoc.ordering._sortFileMetrics src/minidoc/ordering.ml:151 8 6 3 2 1 293.25 62.62
minidoc.ordering._sortFiles src/minidoc/ordering.ml:79 8 6 3 2 1 293.25 62.62
minidoc.ordering._sortFunctionMetrics src/minidoc/ordering.ml:162 8 6 3 2 1 395 61.72
minidoc.ordering._sortImports src/minidoc/ordering.ml:101 8 6 3 2 1 395 61.72
minidoc.ordering._sortOccurrences src/minidoc/ordering.ml:173 8 6 3 2 1 346.79 62.11
minidoc.ordering._sortRelations src/minidoc/ordering.ml:139 9 7 3 2 1 485.97 59.97
minidoc.ordering._sortSymbols src/minidoc/ordering.ml:90 8 6 3 2 1 395 61.72
minidoc.ordering._sortWithKeys src/minidoc/ordering.ml:28 48 40 12 27 4 1563.79 39.35
minidoc.ordering.apply src/minidoc/ordering.ml:197 18 13 4 4 2 955.58 51.21
minidoc.render_html._css src/minidoc/render_html.ml:752 3 1 1 0 0 22.46 80
minidoc.render_html._dependencies src/minidoc/render_html.ml:587 15 13 5 9 3 842 53.19
minidoc.render_html._dependencyReferenceCount src/minidoc/render_html.ml:571 13 14 7 11 3 665.96 54.99
minidoc.render_html._diagnostics src/minidoc/render_html.ml:624 12 11 3 2 1 786.06 55.78
minidoc.render_html._file src/minidoc/render_html.ml:527 41 43 22 43 4 3375.71 37.15
minidoc.render_html._fileById src/minidoc/render_html.ml:53 7 6 4 4 2 279.68 63.9
minidoc.render_html._filePage src/minidoc/render_html.ml:87 3 1 1 0 0 76.15 76.28
minidoc.render_html._files src/minidoc/render_html.ml:368 17 16 6 12 3 903.52 51.65
minidoc.render_html._fileVisible src/minidoc/render_html.ml:22 4 3 2 1 1 191.76 70.61
minidoc.render_html._graphEnabled src/minidoc/render_html.ml:73 4 3 2 1 1 159.91 71.17
minidoc.render_html._graphPage src/minidoc/render_html.ml:725 5 4 2 1 1 315.77 66.98
minidoc.render_html._hasDependencies src/minidoc/render_html.ml:63 7 6 4 4 2 351.75 63.2
minidoc.render_html._home src/minidoc/render_html.ml:332 33 36 11 13 3 2608.73 41.47
minidoc.render_html._isType src/minidoc/render_html.ml:37 3 1 1 0 0 121.11 74.87
minidoc.render_html._javascript src/minidoc/render_html.ml:758 3 1 1 0 0 22.46 80
minidoc.render_html._layout src/minidoc/render_html.ml:294 14 15 5 4 1 1162.05 52.86
minidoc.render_html._markdownHtml src/minidoc/render_html.ml:129 38 44 17 30 3 2586.64 39.36
minidoc.render_html._metrics src/minidoc/render_html.ml:639 76 70 14 31 5 8435.83 29.6
minidoc.render_html._ownerType src/minidoc/render_html.ml:105 10 9 5 6 2 299.56 60.17
minidoc.render_html._package src/minidoc/render_html.ml:500 24 23 12 23 3 1476.64 46.09
minidoc.render_html._packagePage src/minidoc/render_html.ml:99 3 1 1 0 0 66.61 76.69
minidoc.render_html._packages src/minidoc/render_html.ml:311 11 11 5 6 2 483.31 57.82
minidoc.render_html._packagesIndex src/minidoc/render_html.ml:485 12 8 3 3 2 486.26 57.24
minidoc.render_html._projectDescription src/minidoc/render_html.ml:325 4 3 2 1 1 130.8 71.78
minidoc.render_html._searchIndex src/minidoc/render_html.ml:733 16 14 5 9 3 955.31 52.19
minidoc.render_html._shortRevision src/minidoc/render_html.ml:80 4 3 2 1 1 122.62 71.97
minidoc.render_html._sortTags src/minidoc/render_html.ml:180 16 12 4 4 2 515.24 54.21
minidoc.render_html._symbolById src/minidoc/render_html.ml:43 7 6 4 4 2 279.68 63.9
minidoc.render_html._symbolFixtureRole src/minidoc/render_html.ml:425 7 5 3 3 2 257.47 64.28
minidoc.render_html._symbolHasTag src/minidoc/render_html.ml:404 7 6 4 4 2 263.22 64.08
minidoc.render_html._symbolHtml src/minidoc/render_html.ml:199 92 94 43 80 3 7991.64 24.05
minidoc.render_html._symbolLink src/minidoc/render_html.ml:118 8 9 4 3 1 423.05 61.37
minidoc.render_html._symbols src/minidoc/render_html.ml:388 13 10 4 6 3 707.45 55.21
minidoc.render_html._symbolTagKeys src/minidoc/render_html.ml:414 8 7 5 5 2 407.27 61.35
minidoc.render_html._tagValue src/minidoc/render_html.ml:170 7 6 4 4 2 296.13 63.72
minidoc.render_html._tests src/minidoc/render_html.ml:435 47 47 19 43 4 3151.41 36.47
minidoc.render_html._type src/minidoc/render_html.ml:605 16 15 6 8 3 1019.29 51.86
minidoc.render_html._typePage src/minidoc/render_html.ml:93 3 1 1 0 0 76.15 76.28
minidoc.render_html._visible src/minidoc/render_html.ml:29 5 4 3 2 1 232.19 67.78
minidoc.render_html._writeGenerated src/minidoc/render_html.ml:764 5 4 2 1 1 222.91 68.04
minidoc.render_html.render src/minidoc/render_html.ml:773 81 93 39 59 4 7345.4 26.05
minidoc.render_markdown._appendSymbol src/minidoc/render_markdown.ml:237 38 39 10 16 3 2211.77 40.77
minidoc.render_markdown._appendTagSections src/minidoc/render_markdown.ml:130 85 79 36 71 3 4521.6 27.48
minidoc.render_markdown._dependencyReferenceCount src/minidoc/render_markdown.ml:555 13 14 7 11 3 665.96 54.99
minidoc.render_markdown._fileById src/minidoc/render_markdown.ml:54 7 6 4 4 2 279.68 63.9
minidoc.render_markdown._filePage src/minidoc/render_markdown.ml:88 3 1 1 0 0 76.15 76.28
minidoc.render_markdown._fileVisible src/minidoc/render_markdown.ml:23 4 3 2 1 1 191.76 70.61
minidoc.render_markdown._graphEnabled src/minidoc/render_markdown.ml:74 4 3 2 1 1 159.91 71.17
minidoc.render_markdown._hasDependencies src/minidoc/render_markdown.ml:64 7 6 4 4 2 351.75 63.2
minidoc.render_markdown._homeName src/minidoc/render_markdown.ml:727 4 3 2 1 1 88 72.98
minidoc.render_markdown._indentedCode src/minidoc/render_markdown.ml:625 10 6 3 3 2 318.95 60.25
minidoc.render_markdown._isType src/minidoc/render_markdown.ml:38 3 1 1 0 0 121.11 74.87
minidoc.render_markdown._ownerType src/minidoc/render_markdown.ml:106 10 9 5 6 2 299.56 60.17
minidoc.render_markdown._packagePage src/minidoc/render_markdown.ml:100 3 1 1 0 0 66.61 76.69
minidoc.render_markdown._packages src/minidoc/render_markdown.ml:278 11 11 5 6 2 483.31 57.82
minidoc.render_markdown._projectDescription src/minidoc/render_markdown.ml:292 4 3 2 1 1 130.8 71.78
minidoc.render_markdown._renderDependencies src/minidoc/render_markdown.ml:571 16 14 5 9 3 929.18 52.28
minidoc.render_markdown._renderDiagnostics src/minidoc/render_markdown.ml:611 11 10 3 2 1 795.78 56.57
minidoc.render_markdown._renderFile src/minidoc/render_markdown.ml:508 44 44 22 43 4 3135.37 36.71
minidoc.render_markdown._renderFiles src/minidoc/render_markdown.ml:347 17 16 6 12 3 956.59 51.48
minidoc.render_markdown._renderGraphPage src/minidoc/render_markdown.ml:756 8 7 2 1 1 425.73 61.62
minidoc.render_markdown._renderHome src/minidoc/render_markdown.ml:299 45 47 14 17 3 3229.55 37.48
minidoc.render_markdown._renderMetrics src/minidoc/render_markdown.ml:638 81 75 14 31 5 8501.63 28.97
minidoc.render_markdown._renderPackage src/minidoc/render_markdown.ml:479 26 23 12 23 3 1440 45.4
minidoc.render_markdown._renderPackagesIndex src/minidoc/render_markdown.ml:465 11 7 3 3 2 461.82 58.22
minidoc.render_markdown._renderSidebar src/minidoc/render_markdown.ml:734 19 20 9 9 2 1262.29 49.18
minidoc.render_markdown._renderSymbols src/minidoc/render_markdown.ml:367 13 10 4 6 3 754.43 55.01
minidoc.render_markdown._renderTests src/minidoc/render_markdown.ml:414 48 48 19 43 4 3251.69 36.18
minidoc.render_markdown._renderType src/minidoc/render_markdown.ml:590 18 13 7 10 3 1026.71 50.59
minidoc.render_markdown._shortRevision src/minidoc/render_markdown.ml:81 4 3 2 1 1 122.62 71.97
minidoc.render_markdown._sortTags src/minidoc/render_markdown.ml:218 16 12 4 4 2 515.24 54.21
minidoc.render_markdown._symbolById src/minidoc/render_markdown.ml:44 7 6 4 4 2 279.68 63.9
minidoc.render_markdown._symbolFixtureRole src/minidoc/render_markdown.ml:404 7 5 3 3 2 257.47 64.28
minidoc.render_markdown._symbolHasTag src/minidoc/render_markdown.ml:383 7 6 4 4 2 263.22 64.08
minidoc.render_markdown._symbolLink src/minidoc/render_markdown.ml:119 8 9 4 3 1 423.05 61.37
minidoc.render_markdown._symbolTagKeys src/minidoc/render_markdown.ml:393 8 7 5 5 2 407.27 61.35
minidoc.render_markdown._typePage src/minidoc/render_markdown.ml:94 3 1 1 0 0 76.15 76.28
minidoc.render_markdown._visible src/minidoc/render_markdown.ml:30 5 4 3 2 1 232.19 67.78
minidoc.render_markdown._writeGenerated src/minidoc/render_markdown.ml:767 9 8 4 3 1 491.14 59.8
minidoc.render_markdown.render src/minidoc/render_markdown.ml:780 80 89 38 59 4 6165.32 26.84
minidoc.util._gitDirectory src/minidoc/util.ml:290 9 9 3 2 1 464.08 60.11
minidoc.util._optionalText src/minidoc/util.ml:281 6 6 3 2 1 217.13 66.26
minidoc.util._packedRevision src/minidoc/util.ml:302 12 12 8 9 2 693.35 55.49
minidoc.util._stringLess src/minidoc/util.ml:485 13 13 5 6 2 466.31 56.34
minidoc.util.absolutePath src/minidoc/util.ml:119 5 5 4 3 1 214.05 67.9
minidoc.util.addUnique src/minidoc/util.ml:550 4 3 2 1 1 105.49 72.43
minidoc.util.alphabeticalLess src/minidoc/util.ml:503 8 7 2 1 1 253.32 63.2
minidoc.util.containsString src/minidoc/util.ml:540 7 6 5 5 2 264.4 63.93
minidoc.util.currentDirectory src/minidoc/util.ml:111 5 4 3 2 1 146.95 69.17
minidoc.util.directoryName src/minidoc/util.ml:127 8 9 7 6 1 466.76 60.67
minidoc.util.ensureDirectory src/minidoc/util.ml:223 13 14 9 9 2 456.47 55.87
minidoc.util.fileName src/minidoc/util.ml:138 6 5 3 2 1 283.63 65.45
minidoc.util.gitRevision src/minidoc/util.ml:318 26 29 10 23 3 1147.8 46.36
minidoc.util.hashText src/minidoc/util.ml:387 11 8 4 4 2 366.3 58.79
minidoc.util.htmlEscape src/minidoc/util.ml:433 9 7 1 0 0 339.29 61.33
minidoc.util.isAbsolute src/minidoc/util.ml:30 6 6 3 2 1 236.84 66
minidoc.util.isProjectSource src/minidoc/util.ml:176 10 10 7 7 2 482.81 58.45
minidoc.util.isSafeUrl src/minidoc/util.ml:557 4 2 1 0 0 316.36 69.23
minidoc.util.isWhitespaceChar src/minidoc/util.ml:348 3 1 1 0 0 85.11 75.94
minidoc.util.joinPath src/minidoc/util.ml:102 6 7 7 6 1 357.36 64.21
minidoc.util.jsonEscape src/minidoc/util.ml:456 9 7 1 0 0 339.29 61.33
minidoc.util.lineAndColumn src/minidoc/util.ml:367 17 13 7 9 3 479.22 53.45
minidoc.util.markdownTableEscape src/minidoc/util.ml:445 8 6 1 0 0 272.32 63.12
minidoc.util.normalizePath src/minidoc/util.ml:39 58 50 24 42 5 2119.68 35.01
minidoc.util.onlyWhitespace src/minidoc/util.ml:354 10 12 7 7 2 420 58.88
minidoc.util.pathKey src/minidoc/util.ml:156 4 2 1 0 0 74.01 73.64
minidoc.util.pathsEqual src/minidoc/util.ml:167 3 1 1 0 0 65.73 76.73
minidoc.util.readText src/minidoc/util.ml:272 6 6 3 2 1 217.13 66.26
minidoc.util.relativePath src/minidoc/util.ml:189 27 26 14 20 3 1244.75 45.22
minidoc.util.removeStaleGenerated src/minidoc/util.ml:253 16 18 11 13 2 1029.46 51.16
minidoc.util.replaceSlashes src/minidoc/util.ml:23 4 3 2 1 1 127.44 71.86
minidoc.util.slug src/minidoc/util.ml:401 23 19 8 13 4 886.25 48.58
minidoc.util.sortedStrings src/minidoc/util.ml:514 20 14 7 8 2 615.58 51.15
minidoc.util.sourceUrl src/minidoc/util.ml:468 14 15 9 8 1 811.96 53.42
minidoc.util.stableSlug src/minidoc/util.ml:427 3 1 1 0 0 65.73 76.73
minidoc.util.stem src/minidoc/util.ml:147 6 5 3 2 1 232.19 66.06
minidoc.util.writeText src/minidoc/util.ml:239 9 10 4 3 1 377.83 60.6

Code duplication

A clone group is an exact sequence of 6 normalized, contiguous code lines found more than once. Comments and formatting whitespace are ignored. Duplicated-line totals count overlapping windows only once.

Found 89 clone group(s). At most 89 groups are shown.

Clone 1 — 3 occurrences
function _fileById ( project , id )
if len ( project . files ) == 0 then return 0 end if
for i = 0 to len ( project . files ) - 1
if project . files [ i ] . id == id then return project . files [ i ] end if
end for
return 0
Clone 2 — 3 occurrences
if len ( project . files ) == 0 then return 0 end if
for i = 0 to len ( project . files ) - 1
if project . files [ i ] . id == id then return project . files [ i ] end if
end for
return 0
end function
Clone 3 — 3 occurrences
function _symbolById ( project , id )
if len ( project . symbols ) == 0 then return 0 end if
for i = 0 to len ( project . symbols ) - 1
if project . symbols [ i ] . id == id then return project . symbols [ i ] end if
end for
return 0
Clone 4 — 3 occurrences
if len ( project . symbols ) == 0 then return 0 end if
for i = 0 to len ( project . symbols ) - 1
if project . symbols [ i ] . id == id then return project . symbols [ i ] end if
end for
return 0
end function
Clone 5 — 4 occurrences
result [ before + 1 ] = result [ before ]
before = before - 1
end while
result [ before + 1 ] = value
index = index + 1
end while
Clone 6 — 4 occurrences
before = before - 1
end while
result [ before + 1 ] = value
index = index + 1
end while
return result
Clone 7 — 4 occurrences
end while
result [ before + 1 ] = value
index = index + 1
end while
return result
end function
Clone 8 — 2 occurrences
if len ( project . symbols ) > 0 then
for i = 0 to len ( project . symbols ) - 1
if project . symbols [ i ] . id == id then return project . symbols [ i ] . qualified_name end if
end for
end if
if len ( project . files ) > 0 then
Clone 9 — 2 occurrences
for i = 0 to len ( project . symbols ) - 1
if project . symbols [ i ] . id == id then return project . symbols [ i ] . qualified_name end if
end for
end if
if len ( project . files ) > 0 then
for i = 0 to len ( project . files ) - 1
Clone 10 — 2 occurrences
if project . symbols [ i ] . id == id then return project . symbols [ i ] . qualified_name end if
end for
end if
if len ( project . files ) > 0 then
for i = 0 to len ( project . files ) - 1
if project . files [ i ] . id == id then return project . files [ i ] . relative_path end if
Clone 11 — 2 occurrences
end for
end if
if len ( project . files ) > 0 then
for i = 0 to len ( project . files ) - 1
if project . files [ i ] . id == id then return project . files [ i ] . relative_path end if
end for
Clone 12 — 2 occurrences
end if
if len ( project . files ) > 0 then
for i = 0 to len ( project . files ) - 1
if project . files [ i ] . id == id then return project . files [ i ] . relative_path end if
end for
end if
Clone 13 — 2 occurrences
if len ( project . files ) > 0 then
for i = 0 to len ( project . files ) - 1
if project . files [ i ] . id == id then return project . files [ i ] . relative_path end if
end for
end if
return id
Clone 14 — 2 occurrences
for i = 0 to len ( project . files ) - 1
if project . files [ i ] . id == id then return project . files [ i ] . relative_path end if
end for
end if
return id
end function
Clone 15 — 2 occurrences
duplicated_lines ,
duplication_percent ,
clone_group_count ,
documented_symbols ,
documentable_symbols ,
documentation_coverage ,
Clone 16 — 2 occurrences
duplication_percent ,
clone_group_count ,
documented_symbols ,
documentable_symbols ,
documentation_coverage ,
documentation ,
Clone 17 — 2 occurrences
function_count ,
statement_count ,
cyclomatic_complexity ,
average_cyclomatic_complexity ,
maximum_cyclomatic_complexity ,
cognitive_complexity ,
Clone 18 — 2 occurrences
statement_count ,
cyclomatic_complexity ,
average_cyclomatic_complexity ,
maximum_cyclomatic_complexity ,
cognitive_complexity ,
maximum_cognitive_complexity ,
Clone 19 — 2 occurrences
cyclomatic_complexity ,
average_cyclomatic_complexity ,
maximum_cyclomatic_complexity ,
cognitive_complexity ,
maximum_cognitive_complexity ,
duplicated_lines ,
Clone 20 — 2 occurrences
average_cyclomatic_complexity ,
maximum_cyclomatic_complexity ,
cognitive_complexity ,
maximum_cognitive_complexity ,
duplicated_lines ,
duplication_percent ,
Clone 21 — 2 occurrences
function _ownerType ( project , doc_symbol )
current = doc_symbol
while typeof ( current ) == "struct" and current . container_id != ""
parent = _symbolById ( project , current . container_id )
if typeof ( parent ) != "struct" then break end if
if _isType ( parent ) then return parent end if
Clone 22 — 2 occurrences
current = doc_symbol
while typeof ( current ) == "struct" and current . container_id != ""
parent = _symbolById ( project , current . container_id )
if typeof ( parent ) != "struct" then break end if
if _isType ( parent ) then return parent end if
current = parent
Clone 23 — 2 occurrences
while typeof ( current ) == "struct" and current . container_id != ""
parent = _symbolById ( project , current . container_id )
if typeof ( parent ) != "struct" then break end if
if _isType ( parent ) then return parent end if
current = parent
end while
Clone 24 — 2 occurrences
parent = _symbolById ( project , current . container_id )
if typeof ( parent ) != "struct" then break end if
if _isType ( parent ) then return parent end if
current = parent
end while
return 0
Clone 25 — 2 occurrences
if typeof ( parent ) != "struct" then break end if
if _isType ( parent ) then return parent end if
current = parent
end while
return 0
end function
Clone 26 — 2 occurrences
function _symbolLink ( project , doc_symbol )
if _isType ( doc_symbol ) then return _typePage ( doc_symbol ) end if
owner = _ownerType ( project , doc_symbol )
if typeof ( owner ) == "struct" then return _typePage ( owner ) + "#" + doc_symbol . id end if
file = _fileById ( project , doc_symbol . file_id )
if typeof ( file ) == "struct" then return _filePage ( file ) + "#" + doc_symbol . id end if
Clone 27 — 2 occurrences
function _sortTags ( tags )
result = tags
index = 1
while index < len ( result )
value = result [ index ]
before = index - 1
Clone 28 — 2 occurrences
result = tags
index = 1
while index < len ( result )
value = result [ index ]
before = index - 1
value_key = value . key + "\n" + value . text
Clone 29 — 2 occurrences
index = 1
while index < len ( result )
value = result [ index ]
before = index - 1
value_key = value . key + "\n" + value . text
while before >= 0 and util . alphabeticalLess ( value_key , result [ before ] . key + "\n" + result [ before ] . text )
Clone 30 — 2 occurrences
while index < len ( result )
value = result [ index ]
before = index - 1
value_key = value . key + "\n" + value . text
while before >= 0 and util . alphabeticalLess ( value_key , result [ before ] . key + "\n" + result [ before ] . text )
result [ before + 1 ] = result [ before ]
Clone 31 — 2 occurrences
value = result [ index ]
before = index - 1
value_key = value . key + "\n" + value . text
while before >= 0 and util . alphabeticalLess ( value_key , result [ before ] . key + "\n" + result [ before ] . text )
result [ before + 1 ] = result [ before ]
before = before - 1
Clone 32 — 2 occurrences
before = index - 1
value_key = value . key + "\n" + value . text
while before >= 0 and util . alphabeticalLess ( value_key , result [ before ] . key + "\n" + result [ before ] . text )
result [ before + 1 ] = result [ before ]
before = before - 1
end while
Clone 33 — 2 occurrences
value_key = value . key + "\n" + value . text
while before >= 0 and util . alphabeticalLess ( value_key , result [ before ] . key + "\n" + result [ before ] . text )
result [ before + 1 ] = result [ before ]
before = before - 1
end while
result [ before + 1 ] = value
Clone 34 — 2 occurrences
while before >= 0 and util . alphabeticalLess ( value_key , result [ before ] . key + "\n" + result [ before ] . text )
result [ before + 1 ] = result [ before ]
before = before - 1
end while
result [ before + 1 ] = value
index = index + 1
Clone 35 — 2 occurrences
for i = 0 to len ( doc_symbol . parameters ) - 1
parameter = doc_symbol . parameters [ i ]
name = parameter . name
if parameter . variadic then name = name + "..." end if
type_name = parameter . type_name
if type_name == "" then type_name = "dynamic" end if
Clone 36 — 2 occurrences
test_role = ""
test_name = ""
skip_reason = ""
timeout = ""
categories = [ ]
covers = [ ]
Clone 37 — 2 occurrences
test_name = ""
skip_reason = ""
timeout = ""
categories = [ ]
covers = [ ]
if len ( doc_symbol . tags ) > 0 then
Clone 38 — 2 occurrences
skip_reason = ""
timeout = ""
categories = [ ]
covers = [ ]
if len ( doc_symbol . tags ) > 0 then
for i = 0 to len ( doc_symbol . tags ) - 1
Clone 39 — 2 occurrences
timeout = ""
categories = [ ]
covers = [ ]
if len ( doc_symbol . tags ) > 0 then
for i = 0 to len ( doc_symbol . tags ) - 1
tag = doc_symbol . tags [ i ]
Clone 40 — 2 occurrences
else if tag . name == "testmethod" then test_role = "test method" test_name = tag . text
else if tag . name == "beforeall" or tag . name == "afterall" or tag . name == "beforeeach" or tag . name == "aftereach" then test_role = "fixture " + tag . name
else if tag . name == "skip" then skip_reason = tag . text
else if tag . name == "timeout" then timeout = tag . key
else if tag . name == "category" then categories = categories + [ tag . key ]
else if tag . name == "covers" then covers = covers + [ tag . key ]
Clone 41 — 2 occurrences
else if tag . name == "beforeall" or tag . name == "afterall" or tag . name == "beforeeach" or tag . name == "aftereach" then test_role = "fixture " + tag . name
else if tag . name == "skip" then skip_reason = tag . text
else if tag . name == "timeout" then timeout = tag . key
else if tag . name == "category" then categories = categories + [ tag . key ]
else if tag . name == "covers" then covers = covers + [ tag . key ]
end if
Clone 42 — 2 occurrences
else if tag . name == "skip" then skip_reason = tag . text
else if tag . name == "timeout" then timeout = tag . key
else if tag . name == "category" then categories = categories + [ tag . key ]
else if tag . name == "covers" then covers = covers + [ tag . key ]
end if
end for
Clone 43 — 2 occurrences
else if tag . name == "timeout" then timeout = tag . key
else if tag . name == "category" then categories = categories + [ tag . key ]
else if tag . name == "covers" then covers = covers + [ tag . key ]
end if
end for
end if
Clone 44 — 2 occurrences
function _packages ( project )
result = [ ]
if len ( project . files ) == 0 then return result end if
for i = 0 to len ( project . files ) - 1
if _fileVisible ( project , project . files [ i ] ) == false then continue end if
name = project . files [ i ] . package_name
Clone 45 — 2 occurrences
result = [ ]
if len ( project . files ) == 0 then return result end if
for i = 0 to len ( project . files ) - 1
if _fileVisible ( project , project . files [ i ] ) == false then continue end if
name = project . files [ i ] . package_name
if name == "" then name = "(global)" end if
Clone 46 — 2 occurrences
if len ( project . files ) == 0 then return result end if
for i = 0 to len ( project . files ) - 1
if _fileVisible ( project , project . files [ i ] ) == false then continue end if
name = project . files [ i ] . package_name
if name == "" then name = "(global)" end if
result = util . addUnique ( result , name )
Clone 47 — 2 occurrences
for i = 0 to len ( project . files ) - 1
if _fileVisible ( project , project . files [ i ] ) == false then continue end if
name = project . files [ i ] . package_name
if name == "" then name = "(global)" end if
result = util . addUnique ( result , name )
end for
Clone 48 — 2 occurrences
if _fileVisible ( project , project . files [ i ] ) == false then continue end if
name = project . files [ i ] . package_name
if name == "" then name = "(global)" end if
result = util . addUnique ( result , name )
end for
return util . sortedStrings ( result )
Clone 49 — 2 occurrences
name = project . files [ i ] . package_name
if name == "" then name = "(global)" end if
result = util . addUnique ( result , name )
end for
return util . sortedStrings ( result )
end function
Clone 50 — 2 occurrences
if len ( project . files ) > 0 then
for i = 0 to len ( project . files ) - 1
file = project . files [ i ]
if _fileVisible ( project , file ) == false then continue end if
package_name = file . package_name
if package_name == "" then package_name = "(global)" end if
Clone 51 — 2 occurrences
function _symbolHasTag ( doc_symbol , name )
if len ( doc_symbol . tags ) == 0 then return false end if
for i = 0 to len ( doc_symbol . tags ) - 1
if doc_symbol . tags [ i ] . name == name then return true end if
end for
return false
Clone 52 — 2 occurrences
if len ( doc_symbol . tags ) == 0 then return false end if
for i = 0 to len ( doc_symbol . tags ) - 1
if doc_symbol . tags [ i ] . name == name then return true end if
end for
return false
end function
Clone 53 — 2 occurrences
function _symbolTagKeys ( doc_symbol , name )
result = [ ]
if len ( doc_symbol . tags ) == 0 then return result end if
for i = 0 to len ( doc_symbol . tags ) - 1
if doc_symbol . tags [ i ] . name == name and doc_symbol . tags [ i ] . key != "" then result = result + [ doc_symbol . tags [ i ] . key ] end if
end for
Clone 54 — 2 occurrences
result = [ ]
if len ( doc_symbol . tags ) == 0 then return result end if
for i = 0 to len ( doc_symbol . tags ) - 1
if doc_symbol . tags [ i ] . name == name and doc_symbol . tags [ i ] . key != "" then result = result + [ doc_symbol . tags [ i ] . key ] end if
end for
return result
Clone 55 — 2 occurrences
if len ( doc_symbol . tags ) == 0 then return result end if
for i = 0 to len ( doc_symbol . tags ) - 1
if doc_symbol . tags [ i ] . name == name and doc_symbol . tags [ i ] . key != "" then result = result + [ doc_symbol . tags [ i ] . key ] end if
end for
return result
end function
Clone 56 — 2 occurrences
function _symbolFixtureRole ( doc_symbol )
roles = [ "beforeall" , "afterall" , "beforeeach" , "aftereach" ]
for i = 0 to len ( roles ) - 1
if _symbolHasTag ( doc_symbol , roles [ i ] ) then return "@" + roles [ i ] end if
end for
return ""
Clone 57 — 2 occurrences
roles = [ "beforeall" , "afterall" , "beforeeach" , "aftereach" ]
for i = 0 to len ( roles ) - 1
if _symbolHasTag ( doc_symbol , roles [ i ] ) then return "@" + roles [ i ] end if
end for
return ""
end function
Clone 58 — 2 occurrences
count = 0
fixture_count = 0
if len ( project . symbols ) > 0 then
for i = 0 to len ( project . symbols ) - 1
if _visible ( project , project . symbols [ i ] ) then
if _symbolHasTag ( project . symbols [ i ] , "testmethod" ) then count = count + 1
Clone 59 — 2 occurrences
fixture_count = 0
if len ( project . symbols ) > 0 then
for i = 0 to len ( project . symbols ) - 1
if _visible ( project , project . symbols [ i ] ) then
if _symbolHasTag ( project . symbols [ i ] , "testmethod" ) then count = count + 1
else if _symbolFixtureRole ( project . symbols [ i ] ) != "" then fixture_count = fixture_count + 1
Clone 60 — 2 occurrences
if len ( project . symbols ) > 0 then
for i = 0 to len ( project . symbols ) - 1
if _visible ( project , project . symbols [ i ] ) then
if _symbolHasTag ( project . symbols [ i ] , "testmethod" ) then count = count + 1
else if _symbolFixtureRole ( project . symbols [ i ] ) != "" then fixture_count = fixture_count + 1
end if
Clone 61 — 2 occurrences
for i = 0 to len ( project . symbols ) - 1
if _visible ( project , project . symbols [ i ] ) then
if _symbolHasTag ( project . symbols [ i ] , "testmethod" ) then count = count + 1
else if _symbolFixtureRole ( project . symbols [ i ] ) != "" then fixture_count = fixture_count + 1
end if
end if
Clone 62 — 2 occurrences
if _visible ( project , project . symbols [ i ] ) then
if _symbolHasTag ( project . symbols [ i ] , "testmethod" ) then count = count + 1
else if _symbolFixtureRole ( project . symbols [ i ] ) != "" then fixture_count = fixture_count + 1
end if
end if
end for
Clone 63 — 2 occurrences
if _symbolHasTag ( project . symbols [ i ] , "testmethod" ) then count = count + 1
else if _symbolFixtureRole ( project . symbols [ i ] ) != "" then fixture_count = fixture_count + 1
end if
end if
end for
end if
Clone 64 — 2 occurrences
if len ( project . symbols ) > 0 then
for i = 0 to len ( project . symbols ) - 1
test_symbol = project . symbols [ i ]
if _visible ( project , test_symbol ) == false or _symbolHasTag ( test_symbol , "testmethod" ) == false then continue end if
categories = _symbolTagKeys ( test_symbol , "category" )
covers = _symbolTagKeys ( test_symbol , "covers" )
Clone 65 — 2 occurrences
for i = 0 to len ( project . symbols ) - 1
test_symbol = project . symbols [ i ]
if _visible ( project , test_symbol ) == false or _symbolHasTag ( test_symbol , "testmethod" ) == false then continue end if
categories = _symbolTagKeys ( test_symbol , "category" )
covers = _symbolTagKeys ( test_symbol , "covers" )
state = "enabled"
Clone 66 — 2 occurrences
test_symbol = project . symbols [ i ]
if _visible ( project , test_symbol ) == false or _symbolHasTag ( test_symbol , "testmethod" ) == false then continue end if
categories = _symbolTagKeys ( test_symbol , "category" )
covers = _symbolTagKeys ( test_symbol , "covers" )
state = "enabled"
if _symbolHasTag ( test_symbol , "skip" ) then state = "skipped" end if
Clone 67 — 2 occurrences
if _visible ( project , test_symbol ) == false or _symbolHasTag ( test_symbol , "testmethod" ) == false then continue end if
categories = _symbolTagKeys ( test_symbol , "category" )
covers = _symbolTagKeys ( test_symbol , "covers" )
state = "enabled"
if _symbolHasTag ( test_symbol , "skip" ) then state = "skipped" end if
package_name = test_symbol . package_name
Clone 68 — 2 occurrences
categories = _symbolTagKeys ( test_symbol , "category" )
covers = _symbolTagKeys ( test_symbol , "covers" )
state = "enabled"
if _symbolHasTag ( test_symbol , "skip" ) then state = "skipped" end if
package_name = test_symbol . package_name
if package_name == "" then package_name = "(global)" end if
Clone 69 — 2 occurrences
if len ( project . symbols ) > 0 then
for i = 0 to len ( project . symbols ) - 1
fixture_symbol = project . symbols [ i ]
fixture_role = _symbolFixtureRole ( fixture_symbol )
if _visible ( project , fixture_symbol ) == false or fixture_role == "" then continue end if
fixture_package = fixture_symbol . package_name
Clone 70 — 2 occurrences
for i = 0 to len ( project . symbols ) - 1
fixture_symbol = project . symbols [ i ]
fixture_role = _symbolFixtureRole ( fixture_symbol )
if _visible ( project , fixture_symbol ) == false or fixture_role == "" then continue end if
fixture_package = fixture_symbol . package_name
if fixture_package == "" then fixture_package = "(global)" end if
Clone 71 — 2 occurrences
if len ( project . files ) > 0 then
for i = 0 to len ( project . files ) - 1
file = project . files [ i ]
if _fileVisible ( project , file ) == false then continue end if
actual = file . package_name
if actual == "" then actual = "(global)" end if
Clone 72 — 2 occurrences
function _dependencyReferenceCount ( project , dependency_id )
count = 0
if len ( project . files ) == 0 then return count end if
for i = 0 to len ( project . files ) - 1
file = project . files [ i ]
if util . isProjectSource ( file . path , project . config . entry , project . config . source_roots ) == false then continue end if
Clone 73 — 2 occurrences
count = 0
if len ( project . files ) == 0 then return count end if
for i = 0 to len ( project . files ) - 1
file = project . files [ i ]
if util . isProjectSource ( file . path , project . config . entry , project . config . source_roots ) == false then continue end if
if len ( file . imports ) == 0 then continue end if
Clone 74 — 2 occurrences
if len ( project . files ) == 0 then return count end if
for i = 0 to len ( project . files ) - 1
file = project . files [ i ]
if util . isProjectSource ( file . path , project . config . entry , project . config . source_roots ) == false then continue end if
if len ( file . imports ) == 0 then continue end if
for j = 0 to len ( file . imports ) - 1
Clone 75 — 2 occurrences
for i = 0 to len ( project . files ) - 1
file = project . files [ i ]
if util . isProjectSource ( file . path , project . config . entry , project . config . source_roots ) == false then continue end if
if len ( file . imports ) == 0 then continue end if
for j = 0 to len ( file . imports ) - 1
if file . imports [ j ] . target_file_id == dependency_id then count = count + 1 break end if
Clone 76 — 2 occurrences
file = project . files [ i ]
if util . isProjectSource ( file . path , project . config . entry , project . config . source_roots ) == false then continue end if
if len ( file . imports ) == 0 then continue end if
for j = 0 to len ( file . imports ) - 1
if file . imports [ j ] . target_file_id == dependency_id then count = count + 1 break end if
end for
Clone 77 — 2 occurrences
if util . isProjectSource ( file . path , project . config . entry , project . config . source_roots ) == false then continue end if
if len ( file . imports ) == 0 then continue end if
for j = 0 to len ( file . imports ) - 1
if file . imports [ j ] . target_file_id == dependency_id then count = count + 1 break end if
end for
end for
Clone 78 — 2 occurrences
if len ( file . imports ) == 0 then continue end if
for j = 0 to len ( file . imports ) - 1
if file . imports [ j ] . target_file_id == dependency_id then count = count + 1 break end if
end for
end for
return count
Clone 79 — 2 occurrences
for j = 0 to len ( file . imports ) - 1
if file . imports [ j ] . target_file_id == dependency_id then count = count + 1 break end if
end for
end for
return count
end function
Clone 80 — 2 occurrences
if len ( project . files ) > 0 then
for i = 0 to len ( project . files ) - 1
file = project . files [ i ]
if util . isProjectSource ( file . path , project . config . entry , project . config . source_roots ) then continue end if
package_name = file . package_name
if package_name == "" then package_name = "(global)" end if
Clone 81 — 2 occurrences
function _hasDependencies ( project )
if len ( project . files ) == 0 then return false end if
for i = 0 to len ( project . files ) - 1
if util . isProjectSource ( project . files [ i ] . path , project . config . entry , project . config . source_roots ) == false then return true end if
end for
return false
Clone 82 — 2 occurrences
if len ( project . files ) == 0 then return false end if
for i = 0 to len ( project . files ) - 1
if util . isProjectSource ( project . files [ i ] . path , project . config . entry , project . config . source_roots ) == false then return true end if
end for
return false
end function
Clone 83 — 2 occurrences
if typeof ( generated ) == "error" then return generated end if
end for
end if
if len ( project . files ) > 0 then
for i = 0 to len ( project . files ) - 1
if _fileVisible ( project , project . files [ i ] ) == false then continue end if
Clone 84 — 2 occurrences
if typeof ( generated ) == "error" then return generated end if
end for
end if
if len ( project . symbols ) > 0 then
for i = 0 to len ( project . symbols ) - 1
listed_sym = project . symbols [ i ]
Clone 85 — 2 occurrences
end for
end if
if len ( project . symbols ) > 0 then
for i = 0 to len ( project . symbols ) - 1
listed_sym = project . symbols [ i ]
if _isType ( listed_sym ) and _visible ( project , listed_sym ) then
Clone 86 — 2 occurrences
cleaned = util . removeStaleGenerated ( root , generated )
if typeof ( cleaned ) == "error" then return cleaned end if
manifest_written = util . writeText ( util . joinPath ( root , ".minidoc-output" ) , strings . join ( util . sortedStrings ( generated ) , "\n" ) + "\n" )
if typeof ( manifest_written ) == "error" then return manifest_written end if
return true
end function
Clone 87 — 2 occurrences
packages = _packages ( project )
if len ( packages ) > 0 then
for i = 0 to len ( packages ) - 1
writer . appendString ( "- [" + packages [ i ] + "](" + _packagePage ( packages [ i ] ) + ")\n" )
end for
end if
Clone 88 — 2 occurrences
if len ( packages ) > 0 then
for i = 0 to len ( packages ) - 1
writer . appendString ( "- [" + packages [ i ] + "](" + _packagePage ( packages [ i ] ) + ")\n" )
end for
end if
return writer . toString ( )
Clone 89 — 2 occurrences
for i = 0 to len ( packages ) - 1
writer . appendString ( "- [" + packages [ i ] + "](" + _packagePage ( packages [ i ] ) + ")\n" )
end for
end if
return writer . toString ( )
end function

Definitions

  • Cognitive complexity: decision complexity weighted by nesting; logical and/or operators add one.
  • Cyclomatic complexity: one plus decisions from conditions, loops, switch cases, and logical and/or operators.
  • Documentation coverage: percentage of documented API summaries, parameter contracts, fields, constants, globals, and enum variants. Empty categories report 100% and do not affect the overall ratio.
  • Halstead metrics: operators and operands are counted from MiniLang lexical tokens. Estimated defects are volume divided by 3,000.
  • Maintainability index: normalized 0–100 index based on Halstead volume, cyclomatic complexity, and source lines. Project MI is source-line weighted across files.
  • SLOC: non-empty lines containing MiniLang tokens after conditional preprocessing; comment-only lines are excluded.