Line counting conformance
Check out this project on GitHubEvery tool below is judged against its own declared rules, so a failure means the tool disagrees with itself. Hover elements like the test name or the status result for more information or the reasons. Why this exists
83 cases | 2.10 default · 58✓ 25✗ | v3.0.0 (2026-09-02) content · 76✓ 7✗region · 76✓ 7✗ | version 4.0.0 default · 56✓ 27✗ | 14.0.0 compiled with serialization support: json default · 44✓ 39✗ |
|---|---|---|---|---|
| 1000 · comments | ||||
| 1010-code_then_comment_on_one_line | ✓ | ✓ ✓ | ✓ | ✓ |
| 1020-comment_then_code_then_comment | ✓ | ✓ ✓ | ✓ | ✗ fails wants2 code · 0 comments answers1 code · 1 comments |
| 1030-brace_and_trailing_comment | ✓ | ✓ ✓ | ✓ | ✓ |
| 1040-pairs_in_either_order | ✓ | ✓ ✓ | ✓ | ✓ |
| 1050-block_comment_holding_line_comment | ✓ | ✓ ✓ | ✓ | ✓ |
| 1060-line_comment_holding_block_open | ✓ | ✓ ✓ | ✓ | ✓ |
| 1070-block_comment_closed_then_line_comment | ✓ | ✓ ✓ | ✓ | ✗ fails wants1 code · 1 comments answers2 code · 0 comments |
| 1080-block_close_touching_a_line_comment | ✓ | ✓ ✓ | ✓ | ✗ fails wants1 code · 1 comments answers2 code · 0 comments |
| 1090-block_comment_closed_after_a_line_comment | ✓ | ✓ ✓ | ✓ | ✗ fails wants4 code · 3 comments answers2 code · 5 comments |
| 1100-close_touching_reopen_plain | ✓ | ✓ ✓ | ✓ | ✓ |
| 1110-close_and_reopen_with_a_space | ✓ | ✓ ✓ | ✓ | ✓ |
| 1120-close_then_code_then_stray_and_reopen | ✗ fails wants2 code · 2 comments answers1 code · 3 comments | ✓ ✓ | ✓ | ✗ fails wants2 code · 2 comments answers1 code · 3 comments |
| 1130-closer_in_code_with_nothing_open | ✓ | ✓ ✓ | ✓ | ✓ |
| 1140-three_slashes_are_one_comment | ✓ | ✓ ✓ | ✓ | ✓ |
| 1150-doc_comment_opening_after_code | ✓ | ✓ ✓ | ✓ | ✗ fails wants2 code · 1 comments answers1 code · 2 comments regionsMarkdown · wants 1 code · 1 comments · answers 0 code · 2 comments |
| 1160-two_comment_pairs_of_one_language | ✓ | ✓ ✓ | ✓ | ✓ |
| 1170-pascal_writes_two_pairs | ✓ | ✓ ✓ | ✓ | ✓ |
| 1180-cmake_bracket_comment | ✗ fails wants1 code · 3 comments answers3 code · 1 comments | ✓ ✓ | ✗ fails wants1 code · 3 comments answers4 code · 0 comments | ✗ fails wants1 code · 3 comments answers3 code · 1 comments |
| 1190-nested_block_comment_that_does_not | ✓ | ✓ ✓ | ✓ | ✓ |
| 1200-nested_block_comment_that_nests | ✗ fails wants1 code · 1 comments answers2 code · 0 comments | ✓ ✓ | ✗ fails wants1 code · 1 comments answers2 code · 0 comments | ✓ |
| 1210-close_touching_reopen_nesting | ✗ fails wants1 code · 3 comments answers3 code · 1 comments | ✓ ✓ | ✓ | ✓ |
| 1220-nested_block_comment_in_odin | ✗ fails wants2 code · 4 comments answers4 code · 2 comments | ✓ ✓ | ✗ fails wants2 code · 4 comments answers4 code · 2 comments | ✗ fails wants2 code · 4 comments answers4 code · 2 comments |
| 1230-a_comment_word_at_the_head_of_a_longer_word | ✗ fails wants2 code · 1 comments answers1 code · 2 comments | ✓ ✓ | ✗ fails wants2 code · 1 comments answers1 code · 2 comments | ✗ fails wants2 code · 1 comments answers1 code · 2 comments |
| 2000 · string forms | ||||
| 2010-comment_symbol_inside_string | ✓ | ✓ ✓ | ✓ | ✓ |
| 2020-string_symbol_inside_comment | ✓ | ✓ ✓ | ✓ | ✓ |
| 2030-string_symbol_of_another_kind_inside | ✓ | ✓ ✓ | ✓ | ✓ |
| 2040-comment_pair_opening_inside_a_string | ✓ | ✓ ✓ | ✓ | ✓ |
| 2050-string_opening_after_block_close | ✓ | ✓ ✓ | ✓ | ✗ fails wants1 code · 2 comments answers0 code · 3 comments |
| 2060-backtick_template_holding_a_comment | ✗ fails wants4 code · 0 comments answers3 code · 1 comments | ✓ ✓ | ✓ | ✓ |
| 2070-verbatim_string_crossing_lines | ✓ | ✓ ✓ | ✓ | ✓ |
| 2080-odd_triple_quote_count | ✗ fails wants4 code · 1 comments answers2 code · 3 comments | ✓ ✓ | ✓ | ✓ |
| 2090-docstring_holding_a_comment_symbol | ✓ | ✓ ✓ | ✓ ⓘ | ✓ |
| 2100-triple_quoted_data_not_documentation | ✓ ⓘ | ✓ ✓ | ✓ ⓘ | ✓ |
| 2110-here_string_holding_an_apostrophe | ✓ | ✓ ✓ | ✓ | ✓ |
| 2120-heredoc_holding_an_apostrophe | ✓ | ✗ fails wants3 code · 2 comments answers5 code · 0 comments ✗ fails wants3 code · 2 comments answers5 code · 0 comments | ✗ fails wants3 code · 2 comments answers5 code · 0 comments | ✗ fails wants3 code · 2 comments answers5 code · 0 comments |
| 2130-raw_string_holding_quotes | ✓ | ✓ ✓ | ✓ | ✓ |
| 2140-raw_string_holding_its_own_closing_bracket | ✓ | ✓ ✓ | ✓ | ✓ |
| 2150-delimited_raw_string_names_its_own_closer | ✓ | ✗ fails wants4 code · 0 comments answers1 code · 3 comments ✗ fails wants4 code · 0 comments answers1 code · 3 comments | ✗ fails wants4 code · 0 comments answers1 code · 3 comments | ✗ fails wants4 code · 0 comments answers1 code · 3 comments |
| disabled2160-long_bracket_string_holding_a_comment_symbol | ||||
| 2170-lua_level_bracket_holding_plain_close | ✓ | ✓ ✓ | ✓ | ✗ fails wants1 code · 3 comments answers3 code · 1 comments |
| 2180-lua_short_closer_hiding_the_real_one | ✓ | ✓ ✓ | ✓ | ✗ fails wants1 code · 2 comments answers2 code · 1 comments |
| 2190-triple_quote_read_as_three_short_ones | ✗ fails wants5 code · 0 comments answers4 code · 1 comments | ✓ ✓ | ✗ fails wants5 code · 0 comments answers1 code · 4 comments | ✗ fails wants5 code · 0 comments answers1 code · 4 comments |
| 3000 · escapes and the closing quote | ||||
| 3010-escaped_quote_before_comment | ✓ | ✓ ✓ | ✓ | ✓ |
| 3020-multiline_string_ending_in_backslash | ✓ | ✓ ✓ | ✓ | ✓ |
| 3030-raw_string_ending_in_backslash | ✓ | ✓ ✓ | ✓ | ✓ |
| disabled3040-bare_raw_string_ending_in_backslash | ||||
| 3050-verbatim_string_ending_in_a_backslash | ✓ | ✓ ✓ | ✓ | ✓ |
| disabled3060-wysiwyg_string_ending_in_a_backslash | ||||
| 3070-backslash_before_a_closing_quote_in_sql | ✓ | ✓ ✓ | ✗ fails wants2 code · 1 comments answers3 code · 0 comments | ✗ fails wants2 code · 1 comments answers3 code · 0 comments |
| 3080-backtick_escapes_inside_a_double_quoted_string | ✓ | ✓ ✓ | ✗ fails wants2 code · 1 comments answers3 code · 0 comments | ✗ fails wants2 code · 1 comments answers3 code · 0 comments |
| 3090-backtick_before_a_single_quoted_string | ✓ | ✓ ✓ | ✓ | ✗ fails wants2 code · 1 comments answers3 code · 0 comments |
| 4000 · a quote that opens nothing | ||||
| 4010-char_literal_holding_a_quote | ✓ | ✓ ✓ | ✗ fails wants1 code · 2 comments answers3 code · 0 comments | ✗ fails wants1 code · 2 comments answers3 code · 0 comments |
| 4020-two_char_literals_holding_escapes | ✓ | ✓ ✓ | ✗ fails wants3 code · 3 comments answers6 code · 0 comments | ✗ fails wants3 code · 3 comments answers6 code · 0 comments |
| 4030-character_written_with_a_backslash | ✓ | ✓ ✓ | ✓ | ✓ |
| 4040-escaped_apostrophe_outside_quotes | ✓ | ✓ ✓ | ✓ | ✓ |
| 4050-lifetime_and_apostrophe_in_string | ✓ | ✓ ✓ | ✓ | ✓ |
| 4060-primed_identifier_haskell | ✓ | ✓ ✓ | ✓ | ✓ |
| 4070-primed_identifier_ocaml | ✓ | ✓ ✓ | ✓ | ✓ |
| 4080-primed_identifier_and_apostrophe | ✓ | ✓ ✓ | ✓ | ✓ |
| 4090-transpose_operator_and_char | ✓ | ✓ ✓ | ✓ | ✓ |
| 5000 · line splices | ||||
| 5010-line_splice_inside_a_string | ✗ fails wants4 code · 0 comments answers3 code · 1 comments | ✓ ✓ | ✓ | ✓ |
| 5020-blank_line_inside_a_spliced_string | ✗ fails wants1 blanks · 2 code answers0 blanks · 3 code | ✓ ✓ | ✗ fails wants3 code · 1 comments answers4 code · 0 comments | ✓ |
| 5030-line_splice_inside_a_comment | ✗ fails wants1 code · 2 comments answers2 code · 1 comments | ✓ ✓ | ✗ fails wants1 code · 2 comments answers2 code · 1 comments | ✗ fails wants1 code · 2 comments answers2 code · 1 comments |
| 5040-line_splice_in_a_comment_with_no_words | ✗ fails wants2 code · 2 comments answers3 code · 1 comments | ✓ ✓ | ✗ fails wants2 code · 2 comments answers3 code · 1 comments | ✗ fails wants2 code · 2 comments answers3 code · 1 comments |
| 5050-line_splice_after_a_closed_block_comment | ✗ fails wants2 code · 2 comments answers3 code · 1 comments | ✓ ✓ | ✗ fails wants2 code · 2 comments answers3 code · 1 comments | ✗ fails wants2 code · 2 comments answers4 code · 0 comments |
| 5060-code_then_a_spliced_line_comment | ✓ | ✓ ✓ | ✗ fails wants2 code · 1 comments answers3 code · 0 comments | ✗ fails wants2 code · 1 comments answers3 code · 0 comments |
| 5070-blank_line_inside_a_spliced_comment | ✗ fails wants1 blanks · 1 comments answers0 blanks · 2 comments | ✓ ✓ | ✗ fails wants0 blanks · 2 comments answers1 blanks · 1 comments | ✗ fails wants0 blanks · 2 comments answers1 blanks · 1 comments |
| 6000 · another language inside the file | ||||
| 6010-html_has_no_strings | ✓ | ✓ ✓ | ✓ | ✗ fails wants2 code · 1 comments answers3 code · 0 comments |
| 6020-comment_opener_inside_an_attribute | ✗ fails wants3 code · 0 comments answers1 code · 2 comments | ✗ fails wants3 code · 0 comments answers1 code · 2 comments ✗ fails wants3 code · 0 comments answers1 code · 2 comments | ✓ | ✓ |
| 6030-opening_tag_split_over_two_lines | ✗ fails wants4 code · 1 comments answers5 code · 0 comments regionswants JavaScript 2 · finds none | ✗ fails wants4 code · 1 comments answers5 code · 0 comments regionswants JavaScript 2 · finds none ✗ fails wants4 code · 1 comments answers5 code · 0 comments regionswants JavaScript 2 · finds none | ✗ fails wants4 code · 1 comments answers5 code · 0 comments regionswants JavaScript 2 · finds none | ✗ fails wants4 code · 1 comments answers5 code · 0 comments regionswants JavaScript 2 · finds none |
| 6040-script_tag_in_upper_case | ✗ fails wants5 code · 1 comments answers6 code · 0 comments regionswants JavaScript 2 · finds none | ✓ ✓ | ✗ fails wants5 code · 1 comments answers6 code · 0 comments regionswants JavaScript 2 · finds none | ✗ fails wants5 code · 1 comments answers6 code · 0 comments regionswants JavaScript 2 · finds none |
| 6050-script_closer_written_with_a_space | ✗ regions differ regionswants JavaScript 1 · finds none | ✓ ✓ | ✗ regions differ regionswants JavaScript 1 · finds none | ✗ regions differ regionswants JavaScript 1 · finds none |
| 6060-script_closer_inside_a_string | ✓ | ✓ ✓ | ✓ | ✗ fails wants5 lines · 5 code answers6 lines · 6 code regionswants none · finds JavaScript 1 |
| 6070-script_opener_that_never_closes | ✓ | ✓ ✓ | ✓ | ✓ |
| 6080-block_named_by_a_mime_type | ✗ fails wants3 code · 1 comments answers4 code · 0 comments regionswants TypeScript 2 · finds none | ✓ ✓ | ✗ fails wants3 code · 1 comments answers4 code · 0 comments regionswants TypeScript 2 · finds none | ✗ regions differ regionsJavaScript · wanted none · finds 2 lines TypeScript · 2 lines · finds none |
| 6090-vue_blocks_count_as_their_own_languages | ✗ regions differ regionswants CSS 2 · JavaScript 3 · finds none | ✓ ✓ | ✗ fails wants1 blanks · 9 code · 3 comments answers0 blanks · 13 code · 0 comments regionswants CSS 2 · JavaScript 3 · finds none | ✗ fails wants9 code · 3 comments answers10 code · 2 comments regionsHTML · wants 1 code · 1 comments · answers 2 code · 0 comments |
| 6100-block_language_named_by_the_tag | ✗ regions differ regionswants SCSS 2 · TypeScript 2 · finds none | ✓ ✓ | ✗ regions differ regionswants SCSS 2 · TypeScript 2 · finds none | ✗ regions differ regionsCSS · wanted none · finds 2 lines JavaScript · wanted none · finds 2 lines SCSS · 2 lines · finds none TypeScript · 2 lines · finds none |
| 6110-php_block_holding_html_around_it | ✗ fails wants6 code · 1 comments answers7 code · 0 comments regionswants HTML 2 · finds none | ✗ fails wants4 code · 1 comments answers5 code · 0 comments regionswants HTML 2 · finds none ✗ fails wants6 code · 1 comments answers7 code · 0 comments regionswants HTML 2 · finds none | ✗ fails wants6 code · 1 comments answers7 code · 0 comments regionswants HTML 2 · finds none | ✗ fails wants6 code · 1 comments answers7 code · 0 comments regionswants HTML 2 · finds none |
| 6120-script_inside_html_inside_php | ✗ regions differ regionswants HTML 4 · JavaScript 2 · finds none | ✗ regions differ regionswants HTML 4 · JavaScript 2 · finds none ✗ regions differ regionswants HTML 4 · JavaScript 2 · finds none | ✗ regions differ regionswants HTML 4 · JavaScript 2 · finds none | ✗ regions differ regionswants HTML 4 · JavaScript 2 · finds none |
| 7000 · literals with their own delimiters | ||||
| 7010-regex_literal_holding_a_quote | ✓ | ✓ ✓ | ✗ fails wants2 code · 1 comments answers3 code · 0 comments | ✗ fails wants2 code · 1 comments answers3 code · 0 comments |
| 7020-regex_holding_a_comment_opener | ✓ | ✗ fails wants3 code · 0 comments answers1 code · 2 comments ✗ fails wants3 code · 0 comments answers1 code · 2 comments | ✗ fails wants3 code · 0 comments answers1 code · 2 comments | ✗ fails wants3 code · 0 comments answers1 code · 2 comments |
| 8000 · what the line counts as | ||||
| 8010-punctuation_only_line | ✓ | ✓ ✓ | ✓ | ✓ |
| 8020-blank_line_inside_block_comment | ✓ | ✓ ✓ | ✓ | ✓ |
| 8030-blank_line_inside_a_multiline_string | ✗ fails wants5 code · 0 comments answers2 code · 3 comments | ✓ ✓ | ✓ | ✓ |
| 8040-doc_comment_with_no_text | ✓ | ✓ ✓ | ✓ | ✗ fails wants0 blanks · 3 comments answers1 blanks · 2 comments regionsMarkdown · wants 0 blanks · 3 comments · answers 1 blanks · 2 comments |
| 8050-doc_comment_with_no_text_ending_a_block | ✓ | ✓ ✓ | ✓ | ✗ fails wants3 lines · 2 comments answers2 lines · 1 comments regionsMarkdown · wants 2 lines · 2 comments · answers 1 lines · 1 comments |