← Back to home

Test coverage

Line coverage per module and file, from the CI run behind release v1.42.0. Aggregated the same way as the project's release notes and pull request coverage comments, so it never drifts from what actually shipped.

Total line coverage: 95.7% (27113/28336).

App — 95.6% (24503/25644)

Crates — 95.4% (21178/22204)

papyrus-ast-cache — 98.0% (589/601)

FileCoverageLines
app/crates/papyrus-ast-cache/src/lib.rs89.3%50/56
app/crates/papyrus-ast-cache/src/bundled.rs96.2%50/52
app/crates/papyrus-ast-cache/src/version.rs98.5%66/67
app/crates/papyrus-ast-cache/src/bundled_blob.rs98.9%88/89
app/crates/papyrus-ast-cache/src/entry.rs99.1%229/231
app/crates/papyrus-ast-cache/src/ops/load.rs100.0%18/18
app/crates/papyrus-ast-cache/src/ops/prime.rs100.0%12/12
app/crates/papyrus-ast-cache/src/ops/store.rs100.0%51/51
app/crates/papyrus-ast-cache/src/ops/test_support.rs100.0%25/25

papyrus-lint-cli — 99.0% (2859/2887)

FileCoverageLines
app/crates/papyrus-lint-cli/src/args/help.rs91.3%42/46
app/crates/papyrus-lint-cli/src/run_fix.rs92.2%47/51
app/crates/papyrus-lint-cli/src/init.rs94.0%63/67
app/crates/papyrus-lint-cli/src/run_scan.rs96.1%147/153
app/crates/papyrus-lint-cli/src/doctor/report.rs96.9%31/32
app/crates/papyrus-lint-cli/src/project.rs97.1%33/34
app/crates/papyrus-lint-cli/src/run_lint.rs97.7%130/133
app/crates/papyrus-lint-cli/src/output/mod.rs98.6%73/74
app/crates/papyrus-lint-cli/src/run_lint_command.rs98.9%176/178
app/crates/papyrus-lint-cli/src/doctor/checks.rs99.1%209/211
app/crates/papyrus-lint-cli/src/args/mod.rs100.0%3/3
app/crates/papyrus-lint-cli/src/args/parse.rs100.0%34/34
app/crates/papyrus-lint-cli/src/args/validate.rs100.0%191/191
app/crates/papyrus-lint-cli/src/blob.rs100.0%138/138
app/crates/papyrus-lint-cli/src/doctor/mod.rs100.0%43/43
app/crates/papyrus-lint-cli/src/lib.rs100.0%48/48
app/crates/papyrus-lint-cli/src/main.rs100.0%7/7
app/crates/papyrus-lint-cli/src/report.rs100.0%117/117
app/crates/papyrus-lint-cli/src/run_tests/basic.rs100.0%292/292
app/crates/papyrus-lint-cli/src/run_tests/compile_check.rs100.0%49/49
app/crates/papyrus-lint-cli/src/run_tests/cross_script_resolution.rs100.0%191/191
app/crates/papyrus-lint-cli/src/run_tests/fix.rs100.0%253/253
app/crates/papyrus-lint-cli/src/run_tests/script_roots_and_config.rs100.0%187/187
app/crates/papyrus-lint-cli/src/run_tests/stale_output_and_filename_checks.rs100.0%233/233
app/crates/papyrus-lint-cli/src/run_tests/tag_filter.rs100.0%57/57
app/crates/papyrus-lint-cli/src/run_tests/threading.rs100.0%36/36
app/crates/papyrus-lint-cli/src/test_support.rs100.0%29/29

papyrus-lint-config — 92.3% (621/673)

FileCoverageLines
app/crates/papyrus-lint-config/src/presets.rs87.9%290/330
app/crates/papyrus-lint-config/src/project_file.rs94.4%169/179
app/crates/papyrus-lint-config/src/skyrim.rs97.3%72/74
app/crates/papyrus-lint-config/src/compiler.rs100.0%90/90

papyrus-lint-core — 95.2% (2733/2870)

FileCoverageLines
app/crates/papyrus-lint-core/src/function_table/external.rs77.4%41/53
app/crates/papyrus-lint-core/src/function_table/shared.rs77.7%101/130
app/crates/papyrus-lint-core/src/function_table/ancestry.rs81.2%290/357
app/crates/papyrus-lint-core/src/function_table/load.rs95.3%101/106
app/crates/papyrus-lint-core/src/parallel.rs96.3%130/135
app/crates/papyrus-lint-core/src/script_locator.rs97.2%246/253
app/crates/papyrus-lint-core/src/script_functions.rs97.4%303/311
app/crates/papyrus-lint-core/src/compiler.rs99.0%99/100
app/crates/papyrus-lint-core/src/presets.rs99.0%99/100
app/crates/papyrus-lint-core/src/project_root.rs99.2%128/129
app/crates/papyrus-lint-core/src/achlist.rs99.5%201/202
app/crates/papyrus-lint-core/src/compile_diagnostics.rs100.0%220/220
app/crates/papyrus-lint-core/src/content_hash.rs100.0%15/15
app/crates/papyrus-lint-core/src/diff.rs100.0%109/109
app/crates/papyrus-lint-core/src/function_table/mod.rs100.0%63/63
app/crates/papyrus-lint-core/src/function_table/test_support.rs100.0%17/17
app/crates/papyrus-lint-core/src/native_globals.rs100.0%23/23
app/crates/papyrus-lint-core/src/pex_header.rs100.0%170/170
app/crates/papyrus-lint-core/src/script_filename_mismatch.rs100.0%117/117
app/crates/papyrus-lint-core/src/source_encoding.rs100.0%159/159
app/crates/papyrus-lint-core/src/stale_pex.rs100.0%101/101

papyrus-lint-output — 98.8% (243/246)

FileCoverageLines
app/crates/papyrus-lint-output/src/plain.rs95.6%65/68
app/crates/papyrus-lint-output/src/ai.rs100.0%112/112
app/crates/papyrus-lint-output/src/diagnostic.rs100.0%40/40
app/crates/papyrus-lint-output/src/json.rs100.0%26/26

papyrus-lints — 94.6% (11832/12508)

FileCoverageLines
app/crates/papyrus-lints/src/too_many_states.rs52.6%10/19
app/crates/papyrus-lints/src/multiple_auto_states.rs55.0%11/20
app/crates/papyrus-lints/src/lib_tests/support.rs60.8%62/102
app/crates/papyrus-lints/src/goto_state.rs67.6%100/148
app/crates/papyrus-lints/src/useless_downcast.rs68.6%120/175
app/crates/papyrus-lints/src/unused_import.rs79.5%140/176
app/crates/papyrus-lints/src/local_variable_shadowing.rs80.7%134/166
app/crates/papyrus-lints/src/get_state_comparison.rs84.3%134/159
app/crates/papyrus-lints/src/argument_types.rs85.5%278/325
app/crates/papyrus-lints/src/argument_override_types.rs86.5%90/104
app/crates/papyrus-lints/src/return_types.rs87.1%142/163
app/crates/papyrus-lints/src/non_global_function_call.rs88.0%139/158
app/crates/papyrus-lints/src/unnecessary_function.rs89.9%258/287
app/crates/papyrus-lints/src/lib.rs92.7%179/193
app/crates/papyrus-lints/src/impossible_cast.rs93.2%164/176
app/crates/papyrus-lints/src/unused_nodiscard.rs93.6%264/282
app/crates/papyrus-lints/src/formid_hex_notation.rs93.8%195/208
app/crates/papyrus-lints/src/float_int_conversion.rs93.9%46/49
app/crates/papyrus-lints/src/repeated_setoutfit.rs93.9%93/99
app/crates/papyrus-lints/src/setvalue_in_loop.rs94.2%130/138
app/crates/papyrus-lints/src/unresolved_script.rs94.2%229/243
app/crates/papyrus-lints/src/unused_property.rs94.3%66/70
app/crates/papyrus-lints/src/unguarded_self_recursion.rs94.3%216/229
app/crates/papyrus-lints/src/magic_numbers.rs94.4%118/125
app/crates/papyrus-lints/src/forbidden_functions.rs94.6%123/130
app/crates/papyrus-lints/src/lib_tests/disable.rs94.7%18/19
app/crates/papyrus-lints/src/missing_doc_comment.rs94.9%111/117
app/crates/papyrus-lints/src/unchecked_cast.rs95.1%214/225
app/crates/papyrus-lints/src/assignment_operator_spacing.rs95.2%140/147
app/crates/papyrus-lints/src/script_name_collision.rs95.2%40/42
app/crates/papyrus-lints/src/operator_spacing.rs95.3%142/149
app/crates/papyrus-lints/src/global_variable_increment.rs95.4%206/216
app/crates/papyrus-lints/src/get_form_from_file_skyrim_esm.rs95.7%154/161
app/crates/papyrus-lints/src/int_division_to_float.rs96.0%97/101
app/crates/papyrus-lints/src/invalid_random_range.rs96.3%52/54
app/crates/papyrus-lints/src/circular_dependency.rs96.5%83/86
app/crates/papyrus-lints/src/float_equality.rs96.6%57/59
app/crates/papyrus-lints/src/identifier_casing.rs96.6%259/268
app/crates/papyrus-lints/src/static_function_call_via_instance.rs96.6%173/179
app/crates/papyrus-lints/src/unchecked_array_element.rs96.7%261/270
app/crates/papyrus-lints/src/empty_body.rs96.7%119/123
app/crates/papyrus-lints/src/debug_side_effects.rs96.8%120/124
app/crates/papyrus-lints/src/property_sorting.rs96.9%187/193
app/crates/papyrus-lints/src/invariant_loop_condition.rs97.2%106/109
app/crates/papyrus-lints/src/none_form_usage.rs97.3%249/256
app/crates/papyrus-lints/src/unreachable_elseif.rs97.3%145/149
app/crates/papyrus-lints/src/unused_getter.rs97.4%111/114
app/crates/papyrus-lints/src/type_flow.rs97.4%149/153
app/crates/papyrus-lints/src/state_count.rs97.4%75/77
app/crates/papyrus-lints/src/strict_boolean.rs97.6%80/82
app/crates/papyrus-lints/src/slow_functions.rs97.6%161/165
app/crates/papyrus-lints/src/const_eval.rs97.6%81/83
app/crates/papyrus-lints/src/named_arguments.rs97.6%246/252
app/crates/papyrus-lints/src/visitor.rs97.7%385/394
app/crates/papyrus-lints/src/parameter_reassignment.rs97.9%46/47
app/crates/papyrus-lints/src/lib_tests/lint.rs98.0%199/203
app/crates/papyrus-lints/src/array_bounds.rs98.1%153/156
app/crates/papyrus-lints/src/chain_whitespace.rs98.2%112/114
app/crates/papyrus-lints/src/short_wait_interval.rs98.3%57/58
app/crates/papyrus-lints/src/event_signature.rs98.4%62/63
app/crates/papyrus-lints/src/argument_naming.rs98.5%64/65
app/crates/papyrus-lints/src/numeric_comparison.rs98.5%64/65
app/crates/papyrus-lints/src/cyclomatic_complexity.rs98.5%67/68
app/crates/papyrus-lints/src/lib_tests/rule_flags_external.rs98.5%134/136
app/crates/papyrus-lints/src/unused_local_variable.rs98.5%135/137
app/crates/papyrus-lints/src/variable_used_before_assignment.rs98.8%244/247
app/crates/papyrus-lints/src/type_casing.rs98.8%165/167
app/crates/papyrus-lints/src/readonly_property_write.rs98.9%86/87
app/crates/papyrus-lints/src/unchecked_form_parameter.rs99.4%156/157
app/crates/papyrus-lints/src/global_variable_setvalue.rs99.4%172/173
app/crates/papyrus-lints/src/actor_value.rs100.0%52/52
app/crates/papyrus-lints/src/array_size_range.rs100.0%27/27
app/crates/papyrus-lints/src/block_comment.rs100.0%36/36
app/crates/papyrus-lints/src/comma_spacing.rs100.0%112/112
app/crates/papyrus-lints/src/config.rs100.0%76/76
app/crates/papyrus-lints/src/default_property_value.rs100.0%40/40
app/crates/papyrus-lints/src/disable_comments.rs100.0%151/151
app/crates/papyrus-lints/src/division_by_zero.rs100.0%35/35
app/crates/papyrus-lints/src/exclamation_spacing.rs100.0%109/109
app/crates/papyrus-lints/src/explicit_return.rs100.0%41/41
app/crates/papyrus-lints/src/external_signatures.rs100.0%46/46
app/crates/papyrus-lints/src/fragment_code.rs100.0%36/36
app/crates/papyrus-lints/src/function_override.rs100.0%63/63
app/crates/papyrus-lints/src/indentation.rs100.0%191/191
app/crates/papyrus-lints/src/lib_tests/diagnostic.rs100.0%9/9
app/crates/papyrus-lints/src/lib_tests/repair.rs100.0%128/128
app/crates/papyrus-lints/src/lib_tests/repair_external.rs100.0%82/82
app/crates/papyrus-lints/src/lib_tests/restrict_to_line.rs100.0%54/54
app/crates/papyrus-lints/src/lib_tests/rule_flags.rs100.0%287/287
app/crates/papyrus-lints/src/missing_update_handler.rs100.0%58/58
app/crates/papyrus-lints/src/native_function_usage.rs100.0%36/36
app/crates/papyrus-lints/src/registry.rs100.0%5/5
app/crates/papyrus-lints/src/repeated_getvalue.rs100.0%93/93
app/crates/papyrus-lints/src/self_assignment.rs100.0%37/37
app/crates/papyrus-lints/src/semicolon.rs100.0%79/79
app/crates/papyrus-lints/src/state_function_signature.rs100.0%108/108
app/crates/papyrus-lints/src/state_reference.rs100.0%21/21
app/crates/papyrus-lints/src/static_condition.rs100.0%35/35
app/crates/papyrus-lints/src/tags.rs100.0%12/12
app/crates/papyrus-lints/src/trailing_whitespace.rs100.0%59/59
app/crates/papyrus-lints/src/unreachable_statement.rs100.0%50/50
app/crates/papyrus-lints/src/unused_disable.rs100.0%86/86

papyrus-parser — 95.1% (2301/2419)

FileCoverageLines
app/crates/papyrus-parser/src/visit.rs49.2%87/177
app/crates/papyrus-parser/src/lib.rs96.9%506/522
app/crates/papyrus-parser/src/types.rs98.1%259/264
app/crates/papyrus-parser/src/lexer.rs98.8%414/419
app/crates/papyrus-parser/src/parser.rs99.7%705/707
app/crates/papyrus-parser/src/ast.rs100.0%6/6
app/crates/papyrus-parser/src/cache.rs100.0%223/223
app/crates/papyrus-parser/src/token.rs100.0%101/101

frontend — 97.8% (1987/2031)

FileCoverageLines
src/watch.ts87.5%49/56
src/live-edit-lint.ts91.7%22/24
src/code-viewer-diff.ts93.3%28/30
src/progress.ts93.5%29/31
src/code-viewer-actions.ts93.8%60/64
src/code-viewer-compile.ts94.4%17/18
src/autocomplete.ts94.9%168/177
src/live-edit-pointer.ts95.1%116/122
src/backend.ts95.5%42/44
src/live-edit-highlight.ts95.5%21/22
src/results-list-actions.ts97.0%32/33
src/code-viewer-view.ts97.4%37/38
src/presets-picker.ts98.1%52/53
src/live-edit-persist.ts98.2%55/56
src/results-filter.ts98.6%139/141
src/live-edit-autocomplete.ts98.9%88/89
src/drop.ts99.2%122/123
src/code-viewer-dialog.ts100.0%31/31
src/code-viewer-mode.ts100.0%11/11
src/code-viewer-state.ts100.0%27/27
src/code-viewer.ts100.0%14/14
src/config-io.ts100.0%14/14
src/config-ui.ts100.0%84/84
src/config.tsn/a0/0
src/download-text-file.ts100.0%7/7
src/highlight.ts100.0%53/53
src/live-edit-members.ts100.0%10/10
src/live-edit.ts100.0%22/22
src/main-severity.ts100.0%5/5
src/main-tabs.ts100.0%9/9
src/main-types.tsn/a0/0
src/main.ts100.0%73/73
src/path.ts100.0%14/14
src/presets-api.ts100.0%13/13
src/presets-management.ts100.0%98/98
src/presets-state.ts100.0%26/26
src/presets.ts100.0%6/6
src/project-io.ts100.0%42/42
src/project-settings.ts100.0%82/82
src/project-state.ts100.0%32/32
src/project.tsn/a0/0
src/results-export-ai.ts100.0%38/38
src/results-export-json.ts100.0%3/3
src/results-export-text.ts100.0%1/1
src/results-export-types.ts100.0%2/2
src/results-list-export.ts100.0%18/18
src/results-list-item.ts100.0%89/89
src/results-list-mass-fix.ts100.0%32/32
src/results-list-render.ts100.0%12/12
src/results-list-state.ts100.0%16/16
src/results-list.ts100.0%4/4
src/theme.ts100.0%22/22

src-tauri — 95.0% (1338/1409)

FileCoverageLines
app/src-tauri/src/lib.rs0.0%0/8
app/src-tauri/src/export.rs92.1%58/63
app/src-tauri/src/main.rs93.3%237/254
app/src-tauri/src/lint_config.rs93.8%195/208
app/src-tauri/src/repair.rs95.1%135/142
app/src-tauri/src/project_root.rs96.1%49/51
app/src-tauri/src/lint.rs96.6%114/118
app/src-tauri/src/config_presets.rs96.7%177/183
app/src-tauri/src/files.rs97.4%334/343
app/src-tauri/src/meta.rs100.0%39/39

Editor plugins — 99.2% (1034/1042)

SublimeLinter-contrib-papyrus-lint — 98.9% (363/367)

FileCoverageLines
SublimeLinter-contrib-papyrus-lint/cli_download.py97.3%145/149
SublimeLinter-contrib-papyrus-lint/cli_hashes.py100.0%1/1
SublimeLinter-contrib-papyrus-lint/commands.py100.0%174/174
SublimeLinter-contrib-papyrus-lint/linter.py100.0%43/43

vscode-extension — 99.4% (671/675)

FileCoverageLines
out-test/src/cli.js97.8%87/89
out-test/src/cliDownload.js98.4%120/122
out-test/src/cliHashes.js100.0%13/13
out-test/src/codeActions.js100.0%34/34
out-test/src/config.js100.0%38/38
out-test/src/diagnostics.js100.0%22/22
out-test/src/documents.js100.0%34/34
out-test/src/extension.js100.0%47/47
out-test/src/init.js100.0%76/76
out-test/src/linter.js100.0%111/111
out-test/src/liveLint.js100.0%46/46
out-test/src/vscodeDiagnostics.js100.0%43/43

Tooling — 95.5% (1576/1650)

CI tooling — 94.9% (777/819)

FileCoverageLines
.github/scripts/write_cli_hashes.py0.0%0/16
.github/scripts/lighthouse_summary.py90.9%10/11
.github/scripts/render_nexuspage.py91.7%11/12
.github/scripts/build_rules_json.py93.3%14/15
.github/scripts/ci_lib/source_metrics.py93.3%154/165
.github/scripts/bbcode_lint.py93.8%15/16
.github/scripts/ci_lib/links.py94.3%116/123
.github/scripts/generate_nexuspage_tables.py94.4%17/18
.github/scripts/hall_of_shame.py95.2%20/21
.github/scripts/coverage_summary.py95.5%21/22
.github/scripts/semver_advisory.py96.9%31/32
.github/scripts/ci_lib/__init__.pyn/a0/0
.github/scripts/ci_lib/bbcode.py100.0%44/44
.github/scripts/ci_lib/cli_release_hashes.py100.0%49/49
.github/scripts/ci_lib/coverage_lcov.py100.0%56/56
.github/scripts/ci_lib/lighthouse_report.py100.0%71/71
.github/scripts/ci_lib/nexuspage_render.py100.0%27/27
.github/scripts/ci_lib/nexuspage_tables.py100.0%30/30
.github/scripts/ci_lib/rules_json.py100.0%16/16
.github/scripts/ci_lib/semver.py100.0%75/75

Pages (site builder) — 96.1% (799/831)

FileCoverageLines
pages/build.py92.7%102/110
pages/browser_check.py94.1%128/136
pages/rules_page.py94.4%51/54
pages/site_chrome.py95.6%65/68
pages/css.py95.7%22/23
pages/docs_pages.py96.8%120/124
pages/coverage_report.py97.3%107/110
pages/markdown_render.py98.5%130/132
pages/highlighting.py100.0%21/21
pages/minify.py100.0%19/19
pages/site_assets.py100.0%34/34