gitextract_av__3sa_/ ├── .dockerignore ├── .editorconfig ├── .envrc ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── report-false-positive.md │ │ ├── report-grammatical-error.md │ │ └── suggest-a-feature.md │ ├── dependabot.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── binaries.yml │ ├── build_web.yml │ ├── chrome_plugin.yml │ ├── just_checks.yml │ ├── stale.yml │ ├── vscode_plugin.yml │ └── wp_plugin.yml ├── .gitignore ├── .node-version ├── .npmrc ├── AGENTS.md ├── ARCHITECTURE.md ├── COMPARISON.md ├── CONTRIBUTING.md ├── Cargo.toml ├── Dockerfile ├── LICENSE ├── README.md ├── biome.json ├── demo.md ├── docker-compose.dev.yml ├── docker-compose.yml ├── flake.nix ├── fuzz/ │ ├── .gitignore │ ├── Cargo.toml │ ├── README.md │ └── fuzz_targets/ │ ├── fuzz_harper_comment.rs │ ├── fuzz_harper_core_markdown.rs │ ├── fuzz_harper_html.rs │ ├── fuzz_harper_literate_haskell.rs │ └── fuzz_harper_typst.rs ├── harper-asciidoc/ │ ├── Cargo.toml │ ├── src/ │ │ └── lib.rs │ └── tests/ │ ├── asciidoc_tests.rs │ └── test_sources/ │ ├── basic.adoc │ ├── comment.adoc │ ├── comprehensive.adoc │ └── table.adoc ├── harper-brill/ │ ├── Cargo.toml │ ├── finished_chunker/ │ │ ├── model.mpk │ │ └── vocab.json │ ├── src/ │ │ └── lib.rs │ ├── trained_chunker_model.json │ └── trained_tagger_model.json ├── harper-cli/ │ ├── Cargo.toml │ ├── README.md │ ├── src/ │ │ ├── annotate.rs │ │ ├── input/ │ │ │ ├── multi_input.rs │ │ │ └── single_input.rs │ │ ├── input.rs │ │ ├── lint.rs │ │ └── main.rs │ └── tests/ │ ├── no_color.rs │ └── output_format.rs ├── harper-comments/ │ ├── Cargo.toml │ ├── README.md │ ├── src/ │ │ ├── comment_parser.rs │ │ ├── comment_parsers/ │ │ │ ├── go.rs │ │ │ ├── javadoc.rs │ │ │ ├── jsdoc.rs │ │ │ ├── lua.rs │ │ │ ├── mod.rs │ │ │ ├── solidity.rs │ │ │ └── unit.rs │ │ ├── lib.rs │ │ └── masker.rs │ └── tests/ │ ├── language_support.rs │ └── language_support_sources/ │ ├── basic.clj │ ├── basic_groovy.groovy │ ├── basic_kotlin.kt │ ├── clean.lua │ ├── clean.ps1 │ ├── clean.rs │ ├── clean.sol │ ├── clean.zig │ ├── common.mill │ ├── complex_gradle_build.gradle │ ├── complex_groovy_block_comments.groovy │ ├── complex_groovy_strings_regex.groovy │ ├── dirty.lua │ ├── dirty.zig │ ├── empty.js │ ├── eof.rs │ ├── ignore_comments.c │ ├── ignore_comments.ps1 │ ├── ignore_comments.rs │ ├── ignore_comments.sol │ ├── ignore_shebang_1.sh │ ├── ignore_shebang_2.sh │ ├── ignore_shebang_3.sh │ ├── ignore_shebang_4.sh │ ├── issue_1097.lua │ ├── issue_132.rs │ ├── issue_229.c │ ├── issue_229.cs │ ├── issue_229.js │ ├── issue_96.lua │ ├── issue_96.rb │ ├── javadoc_clean_simple.java │ ├── javadoc_complex.java │ ├── jsdoc.ts │ ├── laravel_app.php │ ├── merged_lines.ts │ ├── multiline_comments.cpp │ ├── multiline_comments.sol │ └── multiline_comments.ts ├── harper-core/ │ ├── Cargo.toml │ ├── README.md │ ├── annotations.json │ ├── benches/ │ │ ├── essay.md │ │ └── parse_essay.rs │ ├── build.rs │ ├── clippy.toml │ ├── dictionary.dict │ ├── irregular_nouns.json │ ├── irregular_verbs.json │ ├── proper_noun_rules.json │ ├── src/ │ │ ├── case.rs │ │ ├── char_ext.rs │ │ ├── char_string.rs │ │ ├── currency.rs │ │ ├── dict_word_metadata.rs │ │ ├── dict_word_metadata_orthography.rs │ │ ├── document.rs │ │ ├── edit_distance.rs │ │ ├── expr/ │ │ │ ├── all.rs │ │ │ ├── anchor_end.rs │ │ │ ├── anchor_start.rs │ │ │ ├── duration_expr.rs │ │ │ ├── expr_map.rs │ │ │ ├── filter.rs │ │ │ ├── first_match_of.rs │ │ │ ├── fixed_phrase.rs │ │ │ ├── longest_match_of.rs │ │ │ ├── mergeable_words.rs │ │ │ ├── mod.rs │ │ │ ├── optional.rs │ │ │ ├── reflexive_pronoun.rs │ │ │ ├── repeating.rs │ │ │ ├── sequence_expr.rs │ │ │ ├── similar_to_phrase.rs │ │ │ ├── space_or_hyphen.rs │ │ │ ├── spelled_number_expr.rs │ │ │ ├── step.rs │ │ │ ├── time_unit_expr.rs │ │ │ ├── unless_step.rs │ │ │ └── word_expr_group.rs │ │ ├── fat_token.rs │ │ ├── ignored_lints/ │ │ │ ├── lint_context.rs │ │ │ └── mod.rs │ │ ├── indefinite_article.rs │ │ ├── irregular_nouns.rs │ │ ├── irregular_verbs.rs │ │ ├── language_detection.rs │ │ ├── lexing/ │ │ │ ├── email_address.rs │ │ │ ├── hostname.rs │ │ │ ├── mod.rs │ │ │ └── url.rs │ │ ├── lib.rs │ │ ├── linting/ │ │ │ ├── a_part.rs │ │ │ ├── a_while.rs │ │ │ ├── addicting.rs │ │ │ ├── adjective_double_degree.rs │ │ │ ├── adjective_of_a.rs │ │ │ ├── after_later.rs │ │ │ ├── all_hell_break_loose.rs │ │ │ ├── all_intents_and_purposes.rs │ │ │ ├── allow_to.rs │ │ │ ├── am_in_the_morning.rs │ │ │ ├── amounts_for.rs │ │ │ ├── an_a.rs │ │ │ ├── and_in.rs │ │ │ ├── and_the_like.rs │ │ │ ├── another_thing_coming.rs │ │ │ ├── another_think_coming.rs │ │ │ ├── apart_from.rs │ │ │ ├── ask_no_preposition.rs │ │ │ ├── avoid_curses.rs │ │ │ ├── back_in_the_day.rs │ │ │ ├── be_allowed.rs │ │ │ ├── be_worried.rs │ │ │ ├── behind_the_scenes.rs │ │ │ ├── best_of_all_time.rs │ │ │ ├── boring_words.rs │ │ │ ├── bought.rs │ │ │ ├── brand_brandish.rs │ │ │ ├── by_accident.rs │ │ │ ├── call_them.rs │ │ │ ├── cant.rs │ │ │ ├── capitalize_personal_pronouns.rs │ │ │ ├── cautionary_tale.rs │ │ │ ├── change_tack.rs │ │ │ ├── chock_full.rs │ │ │ ├── closed_compounds.rs │ │ │ ├── comma_fixes.rs │ │ │ ├── compound_nouns/ │ │ │ │ ├── compound_noun_after_det_adj.rs │ │ │ │ ├── compound_noun_after_possessive.rs │ │ │ │ ├── compound_noun_before_aux_verb.rs │ │ │ │ └── mod.rs │ │ │ ├── compound_subject_i.rs │ │ │ ├── confident.rs │ │ │ ├── correct_number_suffix.rs │ │ │ ├── criteria_phenomena.rs │ │ │ ├── cure_for.rs │ │ │ ├── currency_placement.rs │ │ │ ├── damages.rs │ │ │ ├── dashes.rs │ │ │ ├── day_and_age.rs │ │ │ ├── despite_it_is.rs │ │ │ ├── despite_of.rs │ │ │ ├── determiner_without_noun.rs │ │ │ ├── did_past.rs │ │ │ ├── didnt.rs │ │ │ ├── discourse_markers.rs │ │ │ ├── disjoint_prefixes.rs │ │ │ ├── do_mistake.rs │ │ │ ├── dot_initialisms.rs │ │ │ ├── double_click.rs │ │ │ ├── double_modal.rs │ │ │ ├── ellipsis_length.rs │ │ │ ├── else_possessive.rs │ │ │ ├── ever_every.rs │ │ │ ├── everyday.rs │ │ │ ├── expand_memory_shorthands.rs │ │ │ ├── expand_time_shorthands.rs │ │ │ ├── expr_linter.rs │ │ │ ├── far_be_it.rs │ │ │ ├── fascinated_by.rs │ │ │ ├── fed_up_with.rs │ │ │ ├── feel_fell.rs │ │ │ ├── few_units_of_time_ago.rs │ │ │ ├── filler_words.rs │ │ │ ├── find_fine.rs │ │ │ ├── first_aid_kit.rs │ │ │ ├── flesh_out_vs_full_fledged.rs │ │ │ ├── for_noun.rs │ │ │ ├── free_predicate.rs │ │ │ ├── friend_of_me.rs │ │ │ ├── go_so_far_as_to.rs │ │ │ ├── go_to_war.rs │ │ │ ├── good_at.rs │ │ │ ├── handful.rs │ │ │ ├── have_pronoun.rs │ │ │ ├── have_take_a_look.rs │ │ │ ├── hedging.rs │ │ │ ├── hello_greeting.rs │ │ │ ├── hereby.rs │ │ │ ├── hop_hope/ │ │ │ │ ├── mod.rs │ │ │ │ ├── to_hop.rs │ │ │ │ └── to_hope.rs │ │ │ ├── hope_youre.rs │ │ │ ├── how_to.rs │ │ │ ├── hyphenate_number_day.rs │ │ │ ├── i_am_agreement.rs │ │ │ ├── if_wouldve.rs │ │ │ ├── in_on_the_cards.rs │ │ │ ├── inflected_verb_after_to.rs │ │ │ ├── initialism_linter.rs │ │ │ ├── initialisms.rs │ │ │ ├── interested_in.rs │ │ │ ├── it_is.rs │ │ │ ├── it_looks_like_that.rs │ │ │ ├── it_would_be.rs │ │ │ ├── its_contraction/ │ │ │ │ ├── general.rs │ │ │ │ ├── mod.rs │ │ │ │ └── proper_noun.rs │ │ │ ├── its_possessive.rs │ │ │ ├── jealous_of.rs │ │ │ ├── johns_hopkins.rs │ │ │ ├── lead_rise_to.rs │ │ │ ├── left_right_hand.rs │ │ │ ├── less_worse.rs │ │ │ ├── let_to_do.rs │ │ │ ├── lets_confusion/ │ │ │ │ ├── let_us_redundancy.rs │ │ │ │ ├── mod.rs │ │ │ │ └── no_contraction_with_verb.rs │ │ │ ├── likewise.rs │ │ │ ├── lint.rs │ │ │ ├── lint_group.rs │ │ │ ├── lint_kind.rs │ │ │ ├── long_sentences.rs │ │ │ ├── look_down_ones_nose.rs │ │ │ ├── looking_forward_to.rs │ │ │ ├── map_phrase_linter.rs │ │ │ ├── map_phrase_set_linter.rs │ │ │ ├── mass_nouns/ │ │ │ │ ├── mass_plurals.rs │ │ │ │ ├── mod.rs │ │ │ │ └── noun_countability.rs │ │ │ ├── means_a_lot_to.rs │ │ │ ├── merge_linters.rs │ │ │ ├── merge_words.rs │ │ │ ├── missing_preposition.rs │ │ │ ├── missing_space.rs │ │ │ ├── missing_to.rs │ │ │ ├── misspell.rs │ │ │ ├── mixed_bag.rs │ │ │ ├── mod.rs │ │ │ ├── modal_be_adjective.rs │ │ │ ├── modal_of.rs │ │ │ ├── modal_seem.rs │ │ │ ├── months.rs │ │ │ ├── more_adjective.rs │ │ │ ├── more_better.rs │ │ │ ├── most_number.rs │ │ │ ├── most_of_the_times.rs │ │ │ ├── multiple_frequency_adverbs.rs │ │ │ ├── multiple_sequential_pronouns.rs │ │ │ ├── nail_on_the_head.rs │ │ │ ├── need_to_noun.rs │ │ │ ├── no_french_spaces.rs │ │ │ ├── no_longer.rs │ │ │ ├── no_match_for.rs │ │ │ ├── no_oxford_comma.rs │ │ │ ├── nobody.rs │ │ │ ├── nominal_wants.rs │ │ │ ├── nor_modal_pronoun.rs │ │ │ ├── not_only_inversion.rs │ │ │ ├── noun_verb_confusion/ │ │ │ │ ├── effect_affect/ │ │ │ │ │ ├── affect_to_effect.rs │ │ │ │ │ ├── effect_to_affect.rs │ │ │ │ │ └── mod.rs │ │ │ │ ├── mod.rs │ │ │ │ ├── noun_instead_of_verb/ │ │ │ │ │ ├── general.rs │ │ │ │ │ └── mod.rs │ │ │ │ └── verb_instead_of_noun.rs │ │ │ ├── number_suffix_capitalization.rs │ │ │ ├── obsess_preposition.rs │ │ │ ├── of_course.rs │ │ │ ├── oldest_in_the_book.rs │ │ │ ├── on_floor.rs │ │ │ ├── once_or_twice.rs │ │ │ ├── one_and_the_same.rs │ │ │ ├── one_of_the_singular.rs │ │ │ ├── open_compounds.rs │ │ │ ├── open_the_light.rs │ │ │ ├── orthographic_consistency.rs │ │ │ ├── ought_to_be.rs │ │ │ ├── out_of_date.rs │ │ │ ├── oxford_comma.rs │ │ │ ├── oxymorons.rs │ │ │ ├── phrasal_verb_as_compound_noun.rs │ │ │ ├── phrase_set_corrections/ │ │ │ │ ├── mod.rs │ │ │ │ └── tests.rs │ │ │ ├── pique_interest.rs │ │ │ ├── plural_decades/ │ │ │ │ ├── four_digits.rs │ │ │ │ ├── mod.rs │ │ │ │ └── two_digits.rs │ │ │ ├── plural_wrong_word_of_phrase.rs │ │ │ ├── possessive_noun.rs │ │ │ ├── possessive_your.rs │ │ │ ├── progressive_needs_be.rs │ │ │ ├── pronoun_are.rs │ │ │ ├── pronoun_contraction/ │ │ │ │ ├── avoid_contraction.rs │ │ │ │ ├── mod.rs │ │ │ │ └── should_contract.rs │ │ │ ├── pronoun_inflection_be.rs │ │ │ ├── pronoun_knew.rs │ │ │ ├── pronoun_verb_agreement.rs │ │ │ ├── proper_noun_capitalization_linters.rs │ │ │ ├── quantifier_needs_of.rs │ │ │ ├── quantifier_numeral_conflict.rs │ │ │ ├── quite_quiet.rs │ │ │ ├── quote_spacing.rs │ │ │ ├── reason_for_doing.rs │ │ │ ├── redundant_acronyms.rs │ │ │ ├── redundant_additive_adverbs.rs │ │ │ ├── redundant_progressive_comparative.rs │ │ │ ├── regionalisms.rs │ │ │ ├── regular_irregulars.rs │ │ │ ├── repeated_words.rs │ │ │ ├── respond.rs │ │ │ ├── right_click.rs │ │ │ ├── rise_the_ranks.rs │ │ │ ├── roller_skated.rs │ │ │ ├── safe_to_save.rs │ │ │ ├── save_to_safe.rs │ │ │ ├── sentence_capitalization.rs │ │ │ ├── shoot_oneself_in_the_foot.rs │ │ │ ├── simple_past_to_past_participle.rs │ │ │ ├── since_duration.rs │ │ │ ├── single_be.rs │ │ │ ├── some_without_article.rs │ │ │ ├── something_is.rs │ │ │ ├── somewhat_something.rs │ │ │ ├── soon_to_be.rs │ │ │ ├── sought_after.rs │ │ │ ├── spaces.rs │ │ │ ├── spell_check.rs │ │ │ ├── spelled_numbers.rs │ │ │ ├── split_words.rs │ │ │ ├── subject_pronoun.rs │ │ │ ├── suggestion.rs │ │ │ ├── take_a_look_to.rs │ │ │ ├── take_medicine.rs │ │ │ ├── take_serious.rs │ │ │ ├── that_than.rs │ │ │ ├── that_which.rs │ │ │ ├── the_how_why.rs │ │ │ ├── the_my.rs │ │ │ ├── the_point_for.rs │ │ │ ├── the_proper_noun_possessive.rs │ │ │ ├── then_than.rs │ │ │ ├── theres.rs │ │ │ ├── theses_these.rs │ │ │ ├── theyre_confusions/ │ │ │ │ ├── mod.rs │ │ │ │ ├── over_theyre_to_there.rs │ │ │ │ └── typographic_theyre_to_their.rs │ │ │ ├── thing_think.rs │ │ │ ├── this_type_of_thing.rs │ │ │ ├── though_thought.rs │ │ │ ├── throw_away.rs │ │ │ ├── throw_rubbish.rs │ │ │ ├── to_adverb.rs │ │ │ ├── to_two_too/ │ │ │ │ ├── mod.rs │ │ │ │ ├── to_too_adjective_end.rs │ │ │ │ ├── to_too_adjective_punct.rs │ │ │ │ ├── to_too_adjverb_ed_punct.rs │ │ │ │ ├── to_too_adverb.rs │ │ │ │ ├── to_too_chunk_start_comma.rs │ │ │ │ ├── to_too_degree_words.rs │ │ │ │ ├── to_too_eos.rs │ │ │ │ ├── to_too_pronoun_end.rs │ │ │ │ └── too_to.rs │ │ │ ├── touristic.rs │ │ │ ├── transposed_space.rs │ │ │ ├── try_ones_hand_at.rs │ │ │ ├── unclosed_quotes.rs │ │ │ ├── update_place_names.rs │ │ │ ├── use_title_case.rs │ │ │ ├── verb_to_adjective.rs │ │ │ ├── very_unique.rs │ │ │ ├── vice_versa.rs │ │ │ ├── vicious_loop/ │ │ │ │ └── mod.rs │ │ │ ├── was_aloud.rs │ │ │ ├── way_too_adjective.rs │ │ │ ├── weir_rules/ │ │ │ │ ├── ACoupleMore.weir │ │ │ │ ├── ALongTime.weir │ │ │ │ ├── AOkHyphen.weir │ │ │ │ ├── AdNauseam.weir │ │ │ │ ├── AfterAWhile.weir │ │ │ │ ├── AfterAll.weir │ │ │ │ ├── AheadAnd.weir │ │ │ │ ├── Albeit.weir │ │ │ │ ├── AllOfASudden.weir │ │ │ │ ├── AllReady.weir │ │ │ │ ├── AllThough.weir │ │ │ │ ├── Alongside.weir │ │ │ │ ├── AlzheimersDisease.weir │ │ │ │ ├── AnAnother.weir │ │ │ │ ├── AnotherAn.weir │ │ │ │ ├── AnotherOnes.weir │ │ │ │ ├── AnotherThings.weir │ │ │ │ ├── ArriveOnWeekday.weir │ │ │ │ ├── AsEvidentBy.weir │ │ │ │ ├── AsFarBackAs.weir │ │ │ │ ├── AsFollows.weir │ │ │ │ ├── AsIfThough.weir │ │ │ │ ├── AsItHappens.weir │ │ │ │ ├── AsLongAs.weir │ │ │ │ ├── AsOfCurrently.weir │ │ │ │ ├── AsOfLately.weir │ │ │ │ ├── AsOpposedTo.weir │ │ │ │ ├── AtFaceValue.weir │ │ │ │ ├── AtTheEndOfTheDay.weir │ │ │ │ ├── AtTheExpenseOf.weir │ │ │ │ ├── AvoidAndAlso.weir │ │ │ │ ├── AwareOf.weir │ │ │ │ ├── BadRap.weir │ │ │ │ ├── BanTogether.weir │ │ │ │ ├── BareInMind.weir │ │ │ │ ├── BatedBreath.weir │ │ │ │ ├── BeckAndCall.weir │ │ │ │ ├── BeenThere.weir │ │ │ │ ├── Beforehand.weir │ │ │ │ ├── BesideThePoint.weir │ │ │ │ ├── BestRegards.weir │ │ │ │ ├── BetterOffWith.weir │ │ │ │ ├── BewareOf.weir │ │ │ │ ├── BlacklistWhitelist.weir │ │ │ │ ├── BlanketStatement.weir │ │ │ │ ├── Brutality.weir │ │ │ │ ├── BuiltIn.weir │ │ │ │ ├── CanBeSeen.weir │ │ │ │ ├── CaseInPoint.weir │ │ │ │ ├── CaseSensitive.weir │ │ │ │ ├── ClickThroughRate.weir │ │ │ │ ├── ComprisesOf.weir │ │ │ │ ├── CondenseAllThe.weir │ │ │ │ ├── CoursingThroughVeins.weir │ │ │ │ ├── CuttingAgeEggcorn.weir │ │ │ │ ├── Cybersec.weir │ │ │ │ ├── DampSquib.weir │ │ │ │ ├── DegreesKelvin.weir │ │ │ │ ├── DegreesKelvinSymbol.weir │ │ │ │ ├── DoIAdjective.weir │ │ │ │ ├── DoNotWant.weir │ │ │ │ ├── DoToDueTo.weir │ │ │ │ ├── DontCan.weir │ │ │ │ ├── DoubleNegative.weir │ │ │ │ ├── DueDiligence.weir │ │ │ │ ├── DuringAges.weir │ │ │ │ ├── EachAndEveryOne.weir │ │ │ │ ├── EagleEyed.weir │ │ │ │ ├── EggYolk.weir │ │ │ │ ├── EludedTo.weir │ │ │ │ ├── EnMasse.weir │ │ │ │ ├── EnRoute.weir │ │ │ │ ├── EverPresent.weir │ │ │ │ ├── EverSince.weir │ │ │ │ ├── EveryOnceAndAgain.weir │ │ │ │ ├── EveryTime.weir │ │ │ │ ├── Excellent.weir │ │ │ │ ├── ExpandBecause.weir │ │ │ │ ├── ExpandControl.weir │ │ │ │ ├── ExpandForward.weir │ │ │ │ ├── ExpandMinimum.weir │ │ │ │ ├── ExpandPrevious.weir │ │ │ │ ├── ExpandThrough.weir │ │ │ │ ├── ExpandWith.weir │ │ │ │ ├── ExpandWithout.weir │ │ │ │ ├── FaceFirst.weir │ │ │ │ ├── FairBit.weir │ │ │ │ ├── FarAndFewBetween.weir │ │ │ │ ├── FastPaste.weir │ │ │ │ ├── FatalOutcome.weir │ │ │ │ ├── FetalPosition.weir │ │ │ │ ├── ForALongTime.weir │ │ │ │ ├── ForAWhile.weir │ │ │ │ ├── ForArgumentsSake.weir │ │ │ │ ├── ForTheMostPart.weir │ │ │ │ ├── FreeRein.weir │ │ │ │ ├── Freezing.weir │ │ │ │ ├── FromTheGetGo.weir │ │ │ │ ├── GildedAge.weir │ │ │ │ ├── GoggleBrand.weir │ │ │ │ ├── GoingTo.weir │ │ │ │ ├── GuineaBissau.weir │ │ │ │ ├── HadOf.weir │ │ │ │ ├── HalfAnHour.weir │ │ │ │ ├── Haphazard.weir │ │ │ │ ├── HeDos.weir │ │ │ │ ├── HeartToHeard.weir │ │ │ │ ├── HiddenIn.weir │ │ │ │ ├── HowMach.weir │ │ │ │ ├── HumanBeings.weir │ │ │ │ ├── HumanLife.weir │ │ │ │ ├── HungerPang.weir │ │ │ │ ├── IAm.weir │ │ │ │ ├── IDo.weir │ │ │ │ ├── ImitateFrom.weir │ │ │ │ ├── InAHurry.weir │ │ │ │ ├── InAWhile.weir │ │ │ │ ├── InAnyWay.weir │ │ │ │ ├── InLieuOf.weir │ │ │ │ ├── InNeedOf.weir │ │ │ │ ├── InOfItself.weir │ │ │ │ ├── InThe.weir │ │ │ │ ├── Initiatively.weir │ │ │ │ ├── Insensitive.weir │ │ │ │ ├── InsteadOf.weir │ │ │ │ ├── Insurmountable.weir │ │ │ │ ├── IsKnownFor.weir │ │ │ │ ├── ItCan.weir │ │ │ │ ├── IveGotTo.weir │ │ │ │ ├── JawDropping.weir │ │ │ │ ├── JustDeserts.weir │ │ │ │ ├── KindOf.weir │ │ │ │ ├── KindRegards.weir │ │ │ │ ├── KindSortOf.weir │ │ │ │ ├── LastButNotLeast.weir │ │ │ │ ├── LastDitch.weir │ │ │ │ ├── LastNight.weir │ │ │ │ ├── LaughOfAt.weir │ │ │ │ ├── LeaveToFor.weir │ │ │ │ ├── LetAlone.weir │ │ │ │ ├── LikeAsIf.weir │ │ │ │ ├── LikeThePlague.weir │ │ │ │ ├── LikeTheresNoTomorrow.weir │ │ │ │ ├── LikelyHood.weir │ │ │ │ ├── LinesOfCode.weir │ │ │ │ ├── LooksLikes.weir │ │ │ │ ├── LowHangingFruit.weir │ │ │ │ ├── ManagerialReins.weir │ │ │ │ ├── MercedesBenzHyphen.weir │ │ │ │ ├── MissingDeterminer.weir │ │ │ │ ├── Monumentous.weir │ │ │ │ ├── MoreThatLikely.weir │ │ │ │ ├── MyHouse.weir │ │ │ │ ├── NeedHelp.weir │ │ │ │ ├── NerveRacking.weir │ │ │ │ ├── NobelPeacePrize.weir │ │ │ │ ├── NotBeAfterNot.weir │ │ │ │ ├── NotIn.weir │ │ │ │ ├── NotTo.weir │ │ │ │ ├── NowWay.weir │ │ │ │ ├── OffTheCuff.weir │ │ │ │ ├── OldWivesTale.weir │ │ │ │ ├── OnFirstGlance.weir │ │ │ │ ├── OnSecondThought.weir │ │ │ │ ├── OnTheSpurOfTheMoment.weir │ │ │ │ ├── OnTopOf.weir │ │ │ │ ├── OnceInAWhile.weir │ │ │ │ ├── OneFellSwoop.weir │ │ │ │ ├── OneHanded.weir │ │ │ │ ├── OutOfSync.weir │ │ │ │ ├── PartsOfSpeech.weir │ │ │ │ ├── PasswordProtectedHyphen.weir │ │ │ │ ├── PeaceOfMind.weir │ │ │ │ ├── PedalToTheMetal.weir │ │ │ │ ├── PerSe.weir │ │ │ │ ├── PointsOfView.weir │ │ │ │ ├── PortAuPrince.weir │ │ │ │ ├── PortoNovo.weir │ │ │ │ ├── PrayingMantis.weir │ │ │ │ ├── QuiteMany.weir │ │ │ │ ├── RainbowColoredHyphen.weir │ │ │ │ ├── RallyToReally.weir │ │ │ │ ├── RapidFire.weir │ │ │ │ ├── RealTrouper.weir │ │ │ │ ├── RedundantIIRC.weir │ │ │ │ ├── RedundantPretty.weir │ │ │ │ ├── RedundantThat.weir │ │ │ │ ├── RifeWith.weir │ │ │ │ ├── RoadMap.weir │ │ │ │ ├── RulesOfThumb.weir │ │ │ │ ├── SameAs.weir │ │ │ │ ├── ScantilyClad.weir │ │ │ │ ├── SendAnEmailTo.weir │ │ │ │ ├── ShutdownVerb.weir │ │ │ │ ├── SimilarLike.weir │ │ │ │ ├── SimpleGrammatical.weir │ │ │ │ ├── SneakingSuspicion.weir │ │ │ │ ├── SomeOfThe.weir │ │ │ │ ├── SomebodyElses.weir │ │ │ │ ├── SoonerOrLater.weir │ │ │ │ ├── SpecialAttention.weir │ │ │ │ ├── SpinalChord.weir │ │ │ │ ├── Starving.weir │ │ │ │ ├── StateOfTheArt.weir │ │ │ │ ├── StatuteOfLimitations.weir │ │ │ │ ├── StrikeChord.weir │ │ │ │ ├── SufficeItToSay.weir │ │ │ │ ├── SupposedTo.weir │ │ │ │ ├── TakeItPersonally.weir │ │ │ │ ├── ThanksALot.weir │ │ │ │ ├── ThatChallenged.weir │ │ │ │ ├── ThatThis.weir │ │ │ │ ├── The.weir │ │ │ │ ├── TheAnother.weir │ │ │ │ ├── TheDifferenceBetween.weir │ │ │ │ ├── TheirToThere.weir │ │ │ │ ├── TheirToTheyre.weir │ │ │ │ ├── ThereToTheir.weir │ │ │ │ ├── TheyToThem.weir │ │ │ │ ├── TheyreToTheir.weir │ │ │ │ ├── ThoughtProcess.weir │ │ │ │ ├── ThreatenVerb.weir │ │ │ │ ├── TickingTimeClock.weir │ │ │ │ ├── ToBackOut.weir │ │ │ │ ├── ToDoHyphen.weir │ │ │ │ ├── ToGreatLengths.weir │ │ │ │ ├── ToLoseTooLoose.weir │ │ │ │ ├── ToSomeDegree.weir │ │ │ │ ├── ToTheMannerBorn.weir │ │ │ │ ├── ToWorryAbout.weir │ │ │ │ ├── TongueInCheek.weir │ │ │ │ ├── Towards.weir │ │ │ │ ├── TrialAndError.weir │ │ │ │ ├── TrueToWord.weir │ │ │ │ ├── TuffEnough.weir │ │ │ │ ├── TurnItOff.weir │ │ │ │ ├── Unless.weir │ │ │ │ ├── VeryKnown.weir │ │ │ │ ├── VeryLess.weir │ │ │ │ ├── WantBe.weir │ │ │ │ ├── WaveFunction.weir │ │ │ │ ├── WellBeing.weir │ │ │ │ ├── WellKept.weir │ │ │ │ ├── WhetYourAppetite.weir │ │ │ │ ├── WillContain.weir │ │ │ │ ├── WithoutOut.weir │ │ │ │ ├── WorstCaseScenario.weir │ │ │ │ ├── WroughtIron.weir │ │ │ │ ├── YeaToYeah.weir │ │ │ │ ├── YehToYeah.weir │ │ │ │ ├── YourPredicateAdjective.weir │ │ │ │ └── mod.rs │ │ │ ├── well_educated.rs │ │ │ ├── were_where.rs │ │ │ ├── whereas.rs │ │ │ ├── whom_subject_of_verb.rs │ │ │ ├── widely_accepted.rs │ │ │ ├── win_prize.rs │ │ │ ├── wish_could.rs │ │ │ ├── wordpress_dotcom.rs │ │ │ ├── worth_to_do.rs │ │ │ ├── would_never_have.rs │ │ │ └── wrong_apostrophe.rs │ │ ├── mask/ │ │ │ ├── mod.rs │ │ │ └── regex_masker.rs │ │ ├── number.rs │ │ ├── offsets.rs │ │ ├── parsers/ │ │ │ ├── collapse_identifiers.rs │ │ │ ├── isolate_english.rs │ │ │ ├── markdown.rs │ │ │ ├── mask.rs │ │ │ ├── mod.rs │ │ │ ├── oops_all_headings.rs │ │ │ ├── org_mode.rs │ │ │ └── plain_english.rs │ │ ├── patterns/ │ │ │ ├── any_pattern.rs │ │ │ ├── derived_from.rs │ │ │ ├── implies_quantity.rs │ │ │ ├── indefinite_article.rs │ │ │ ├── inflection_of_be.rs │ │ │ ├── invert.rs │ │ │ ├── mod.rs │ │ │ ├── modal_verb.rs │ │ │ ├── nominal_phrase.rs │ │ │ ├── prepositional_preceder.rs │ │ │ ├── upos_set.rs │ │ │ ├── whitespace_pattern.rs │ │ │ ├── within_edit_distance.rs │ │ │ ├── word.rs │ │ │ └── word_set.rs │ │ ├── punctuation.rs │ │ ├── render_markdown.rs │ │ ├── span.rs │ │ ├── spell/ │ │ │ ├── dictionary.rs │ │ │ ├── fst_dictionary.rs │ │ │ ├── merged_dictionary.rs │ │ │ ├── mod.rs │ │ │ ├── mutable_dictionary.rs │ │ │ ├── rune/ │ │ │ │ ├── affix_replacement.rs │ │ │ │ ├── attribute_list.rs │ │ │ │ ├── error.rs │ │ │ │ ├── expansion.rs │ │ │ │ ├── matcher.rs │ │ │ │ ├── mod.rs │ │ │ │ └── word_list.rs │ │ │ ├── trie_dictionary.rs │ │ │ ├── word_id.rs │ │ │ └── word_map.rs │ │ ├── sync.rs │ │ ├── thesaurus_helper.rs │ │ ├── title_case.rs │ │ ├── token.rs │ │ ├── token_kind.rs │ │ ├── token_string_ext.rs │ │ ├── vec_ext.rs │ │ ├── weir/ │ │ │ ├── ast.rs │ │ │ ├── error.rs │ │ │ ├── mod.rs │ │ │ ├── optimize.rs │ │ │ └── parsing/ │ │ │ ├── expr.rs │ │ │ ├── mod.rs │ │ │ └── stmt.rs │ │ └── weirpack/ │ │ ├── error.rs │ │ ├── manifest.rs │ │ └── mod.rs │ └── tests/ │ ├── linters.rs │ ├── pos_tags.rs │ ├── run_tests.rs │ ├── snapshot.rs │ ├── test_sources/ │ │ ├── allows_domain_extensions.md │ │ ├── amazon_hostname.md │ │ ├── chinese_lorem_ipsum.md │ │ ├── hex_basic_clean.md │ │ ├── hex_basic_dirty.md │ │ ├── index.org │ │ ├── issue_109.md │ │ ├── issue_109_ext.md │ │ ├── issue_118.md │ │ ├── issue_1581.md │ │ ├── issue_159.md │ │ ├── issue_1873.md │ │ ├── issue_195.md │ │ ├── issue_1988.md │ │ ├── issue_2054.md │ │ ├── issue_2054_clean.md │ │ ├── issue_2151.md │ │ ├── issue_2233.md │ │ ├── issue_2240.md │ │ ├── issue_2246.md │ │ ├── issue_267.md │ │ ├── issue_358.md │ │ ├── lots_of_latin.md │ │ ├── lukas_homework.md │ │ ├── misc_closed_compound_clean.md │ │ ├── obsidian_links.md │ │ ├── pr_452.md │ │ ├── pr_504.md │ │ ├── proper_noun_capitalization.md │ │ ├── statist_localist.md │ │ ├── title_case_clean.md │ │ ├── title_case_errors.md │ │ ├── whack_bullets.md │ │ └── yogurt_british_clean.md │ └── text/ │ ├── Alice's Adventures in Wonderland.md │ ├── Computer science.md │ ├── Difficult sentences.md │ ├── Part-of-speech tagging.md │ ├── Spell.US.md │ ├── Spell.md │ ├── Swear.md │ ├── The Constitution of the United States.md │ ├── The Great Gatsby.md │ ├── linters/ │ │ ├── Alice's Adventures in Wonderland.snap.yml │ │ ├── Computer science.snap.yml │ │ ├── Difficult sentences.snap.yml │ │ ├── Part-of-speech tagging.snap.yml │ │ ├── Spell.US.snap.yml │ │ ├── Spell.snap.yml │ │ ├── Swear.snap.yml │ │ ├── The Constitution of the United States.snap.yml │ │ ├── The Great Gatsby.snap.yml │ │ └── this and that.snap.yml │ ├── tagged/ │ │ ├── Alice's Adventures in Wonderland.md │ │ ├── Computer science.md │ │ ├── Difficult sentences.md │ │ ├── Part-of-speech tagging.md │ │ ├── Spell.US.md │ │ ├── Spell.md │ │ ├── Swear.md │ │ ├── The Constitution of the United States.md │ │ ├── The Great Gatsby.md │ │ └── this and that.md │ └── this and that.md ├── harper-html/ │ ├── Cargo.toml │ ├── src/ │ │ └── lib.rs │ └── tests/ │ ├── run_tests.rs │ └── test_sources/ │ ├── issue_156.html │ ├── issue_541.html │ └── run_on.html ├── harper-ink/ │ ├── Cargo.toml │ ├── src/ │ │ └── lib.rs │ └── tests/ │ ├── run_tests.rs │ └── test_sources/ │ ├── bad.ink │ └── good.ink ├── harper-jjdescription/ │ ├── Cargo.toml │ ├── src/ │ │ └── lib.rs │ └── tests/ │ ├── run_tests.rs │ └── test_sources/ │ ├── complex_verbose_description.txt │ ├── conventional_description.txt │ └── simple_description.txt ├── harper-literate-haskell/ │ ├── Cargo.toml │ ├── src/ │ │ ├── lib.rs │ │ └── masker.rs │ └── tests/ │ ├── run_tests.rs │ └── test_sources/ │ ├── bird_format.lhs │ ├── latex_format.lhs │ └── mixed_format.lhs ├── harper-ls/ │ ├── Cargo.toml │ ├── README.md │ └── src/ │ ├── backend.rs │ ├── config.rs │ ├── diagnostics.rs │ ├── dictionary_io.rs │ ├── document_state.rs │ ├── git_commit_parser.rs │ ├── ignored_lints_io.rs │ ├── io_utils.rs │ ├── main.rs │ └── pos_conv.rs ├── harper-pos-utils/ │ ├── Cargo.toml │ └── src/ │ ├── chunker/ │ │ ├── brill_chunker/ │ │ │ ├── mod.rs │ │ │ └── patch.rs │ │ ├── burn_chunker.rs │ │ ├── cached_chunker.rs │ │ ├── mod.rs │ │ ├── np_extraction.rs │ │ └── upos_freq_dict.rs │ ├── conllu_utils.rs │ ├── lib.rs │ ├── patch_criteria.rs │ ├── tagger/ │ │ ├── brill_tagger/ │ │ │ ├── mod.rs │ │ │ └── patch.rs │ │ ├── error_counter.rs │ │ ├── freq_dict.rs │ │ ├── freq_dict_builder.rs │ │ └── mod.rs │ ├── upos.rs │ └── word_counter.rs ├── harper-python/ │ ├── Cargo.toml │ ├── src/ │ │ └── lib.rs │ └── tests/ │ ├── run_tests.rs │ └── test_sources/ │ ├── comments.py │ ├── docstrings.py │ └── field_docstrings.py ├── harper-stats/ │ ├── Cargo.toml │ ├── README.md │ └── src/ │ ├── lib.rs │ ├── record.rs │ └── summary.rs ├── harper-tex/ │ ├── Cargo.toml │ ├── src/ │ │ ├── lib.rs │ │ └── masker.rs │ └── tests/ │ ├── run_tests.rs │ └── test_sources/ │ ├── city.tex │ ├── clean.tex │ ├── em_dash.tex │ ├── heading.tex │ ├── issue_2835.tex │ ├── many_more_tags.tex │ ├── many_tags.tex │ ├── simple.tex │ └── title.tex ├── harper-thesaurus/ │ ├── Cargo.toml │ ├── build.rs │ ├── clippy.toml │ ├── src/ │ │ ├── lib.rs │ │ └── thesaurus.rs │ ├── thesaurus.txt │ └── word-freq.txt ├── harper-tree-sitter/ │ ├── Cargo.toml │ └── src/ │ └── lib.rs ├── harper-typst/ │ ├── Cargo.toml │ ├── src/ │ │ ├── lib.rs │ │ ├── offset_cursor.rs │ │ └── typst_translator.rs │ └── tests/ │ ├── run_tests.rs │ ├── test_sources/ │ │ ├── complex_document.typ │ │ ├── complex_document_with_spelling_mistakes.typ │ │ ├── contractions.typ │ │ ├── function_with_ignorable_args.typ │ │ ├── issue_1926.typ │ │ ├── issue_399.typ │ │ └── simplified_document.typ │ └── tests.rs ├── harper-wasm/ │ ├── Cargo.toml │ ├── README.md │ └── src/ │ └── lib.rs ├── justfile ├── package.json ├── packages/ │ ├── chrome-plugin/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── app.css │ │ ├── options.html │ │ ├── package.json │ │ ├── playwright.config.ts │ │ ├── popup.html │ │ ├── public/ │ │ │ ├── google-docs-bridge-request-handler.js │ │ │ ├── google-docs-bridge.js │ │ │ └── google-docs-protocol.js │ │ ├── sidepanel.html │ │ ├── src/ │ │ │ ├── PopupState.ts │ │ │ ├── ProtocolClient.ts │ │ │ ├── background/ │ │ │ │ ├── detectDialect.ts │ │ │ │ └── index.ts │ │ │ ├── contentScript/ │ │ │ │ ├── GoogleDocsBridgeClient.ts │ │ │ │ ├── googleDocs.ts │ │ │ │ ├── googleDocsBootstrap.js │ │ │ │ ├── googleDocsLayout.ts │ │ │ │ └── index.ts │ │ │ ├── detectBrowserEngine.ts │ │ │ ├── generateGreeting.ts │ │ │ ├── global.d.ts │ │ │ ├── isSubstack.ts │ │ │ ├── isWordPress.ts │ │ │ ├── manifest.ts │ │ │ ├── options/ │ │ │ │ ├── Options.svelte │ │ │ │ └── index.ts │ │ │ ├── popup/ │ │ │ │ ├── Main.svelte │ │ │ │ ├── Onboarding.svelte │ │ │ │ ├── Popup.svelte │ │ │ │ ├── ReportProblematicLint.svelte │ │ │ │ └── index.ts │ │ │ ├── protocol.ts │ │ │ ├── theme.ts │ │ │ └── zip.js │ │ ├── tests/ │ │ │ ├── draft.spec.ts │ │ │ ├── fixtures.ts │ │ │ ├── github.spec.ts │ │ │ ├── google_docs.spec.ts │ │ │ ├── hn.spec.ts │ │ │ ├── lexical.spec.ts │ │ │ ├── lexical_webcomponent.spec.ts │ │ │ ├── lint-kinds.spec.ts │ │ │ ├── nested_elements.spec.ts │ │ │ ├── pages/ │ │ │ │ ├── github_textarea.html │ │ │ │ ├── lexical_webcomponent.html │ │ │ │ ├── nested_elements.html │ │ │ │ ├── quill_simple.html │ │ │ │ ├── simple_inputs_disabled.html │ │ │ │ └── simple_textarea.html │ │ │ ├── prosemirror.spec.ts │ │ │ ├── quill.spec.ts │ │ │ ├── review_banner.spec.ts │ │ │ ├── simple_inputs_disabled.spec.ts │ │ │ ├── simple_textarea.spec.ts │ │ │ ├── slate.spec.ts │ │ │ ├── testUtils.ts │ │ │ └── typst.spec.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── components/ │ │ ├── .gitignore │ │ ├── .npmrc │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.d.ts │ │ │ ├── app.html │ │ │ ├── lib/ │ │ │ │ ├── Button.svelte │ │ │ │ ├── Card.svelte │ │ │ │ ├── Collapsible.svelte │ │ │ │ ├── Input.svelte │ │ │ │ ├── Link.svelte │ │ │ │ ├── Select.svelte │ │ │ │ ├── Textarea.svelte │ │ │ │ ├── index.ts │ │ │ │ └── styles.css │ │ │ └── routes/ │ │ │ ├── +layout.svelte │ │ │ ├── +page.svelte │ │ │ └── layout.css │ │ ├── svelte.config.js │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── harper.js/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── api-extractor.json │ │ ├── docs.sh │ │ ├── examples/ │ │ │ ├── commonjs-simple/ │ │ │ │ ├── README.md │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ └── raw-web/ │ │ │ ├── README.md │ │ │ └── index.html │ │ ├── package.json │ │ ├── renderPage.js │ │ ├── src/ │ │ │ ├── Linter.bench.ts │ │ │ ├── Linter.test.ts │ │ │ ├── Linter.ts │ │ │ ├── LocalLinter.ts │ │ │ ├── Serializer.test.ts │ │ │ ├── Serializer.ts │ │ │ ├── Summary.ts │ │ │ ├── WorkerLinter/ │ │ │ │ ├── index.ts │ │ │ │ ├── shims.ts │ │ │ │ └── worker.ts │ │ │ ├── binary.ts │ │ │ ├── main.ts │ │ │ ├── utils.ts │ │ │ ├── weirpack.test.ts │ │ │ └── weirpack.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── lint-framework/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── assets/ │ │ │ │ ├── bookDownSvg.ts │ │ │ │ └── hints.json │ │ │ ├── index.ts │ │ │ └── lint/ │ │ │ ├── Box.ts │ │ │ ├── Highlights.ts │ │ │ ├── LintFramework.ts │ │ │ ├── PopupHandler.ts │ │ │ ├── RenderBox.ts │ │ │ ├── SourceElement.ts │ │ │ ├── SuggestionBox.ts │ │ │ ├── TextFieldRange.ts │ │ │ ├── computeLintBoxes.ts │ │ │ ├── domUtils.ts │ │ │ ├── editorUtils.ts │ │ │ ├── lintKindColor.ts │ │ │ ├── unpackLint.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── obsidian-plugin/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── HarperSettingTab.ts │ │ │ ├── State.test.ts │ │ │ ├── State.ts │ │ │ ├── index.ts │ │ │ ├── lint.test.ts │ │ │ ├── lint.ts │ │ │ ├── lintKindColor.test.ts │ │ │ ├── lintKindColor.ts │ │ │ ├── textUtils.test.ts │ │ │ └── textUtils.ts │ │ └── vite.config.ts │ ├── vscode-plugin/ │ │ ├── .gitignore │ │ ├── .vscodeignore │ │ ├── README.md │ │ ├── development-guide.md │ │ ├── esbuild.cjs │ │ ├── package.json │ │ ├── src/ │ │ │ ├── extension.ts │ │ │ └── tests/ │ │ │ ├── fixtures/ │ │ │ │ ├── integration.md │ │ │ │ └── languages/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── c.c │ │ │ │ ├── cpp.cpp │ │ │ │ ├── cpp.h │ │ │ │ ├── csharp.cs │ │ │ │ ├── dart.dart │ │ │ │ ├── git-commit │ │ │ │ ├── go.go │ │ │ │ ├── groovy.groovy │ │ │ │ ├── haskell.hs │ │ │ │ ├── html.html │ │ │ │ ├── java.java │ │ │ │ ├── javascript.js │ │ │ │ ├── javascriptreact.jsx │ │ │ │ ├── latex.tex │ │ │ │ ├── literate-haskell.lhs │ │ │ │ ├── lua.lua │ │ │ │ ├── nix.nix │ │ │ │ ├── php.php │ │ │ │ ├── plaintext │ │ │ │ ├── plaintext.txt │ │ │ │ ├── powershell.ps1 │ │ │ │ ├── python.py │ │ │ │ ├── ruby.rb │ │ │ │ ├── rust.rs │ │ │ │ ├── shellscript │ │ │ │ ├── shellscript.bash │ │ │ │ ├── shellscript.sh │ │ │ │ ├── solidity.sol │ │ │ │ ├── swift.swift │ │ │ │ ├── toml.toml │ │ │ │ ├── typescript.ts │ │ │ │ ├── typescriptreact.tsx │ │ │ │ ├── typst.typ │ │ │ │ └── zig.zig │ │ │ ├── runTests.ts │ │ │ └── suite/ │ │ │ ├── helper.ts │ │ │ ├── index.ts │ │ │ ├── integration.test.ts │ │ │ └── languages.test.ts │ │ └── tsconfig.json │ ├── web/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── README.md │ │ ├── demo_wp_blueprint.json │ │ ├── drizzle/ │ │ │ ├── 0000_cute_zuras.sql │ │ │ ├── 0001_blushing_corsair.sql │ │ │ ├── 0002_blushing_chameleon.sql │ │ │ └── meta/ │ │ │ ├── 0000_snapshot.json │ │ │ ├── 0001_snapshot.json │ │ │ ├── 0002_snapshot.json │ │ │ └── _journal.json │ │ ├── drizzle.config.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.css │ │ │ ├── app.d.ts │ │ │ ├── app.html │ │ │ ├── brace.d.ts │ │ │ ├── hooks.server.ts │ │ │ ├── lib/ │ │ │ │ ├── GitHubClient.ts │ │ │ │ ├── components/ │ │ │ │ │ ├── AutomatticLogo.svelte │ │ │ │ │ ├── ChromeLogo.svelte │ │ │ │ │ ├── CodeLogo.svelte │ │ │ │ │ ├── DefaultNeovimConfig.svelte │ │ │ │ │ ├── EdgeLogo.svelte │ │ │ │ │ ├── Editor.svelte │ │ │ │ │ ├── EmacsLogo.svelte │ │ │ │ │ ├── FirefoxLogo.svelte │ │ │ │ │ ├── GitHubLogo.svelte │ │ │ │ │ ├── Graph.svelte │ │ │ │ │ ├── GutterCenter.svelte │ │ │ │ │ ├── HelixLogo.svelte │ │ │ │ │ ├── Isolate.svelte │ │ │ │ │ ├── LazyEditor.svelte │ │ │ │ │ ├── LintCard.svelte │ │ │ │ │ ├── LintKindChart.svelte │ │ │ │ │ ├── LintSidebar.svelte │ │ │ │ │ ├── Logo.svelte │ │ │ │ │ ├── NeovimLogo.svelte │ │ │ │ │ ├── ObsidianLogo.svelte │ │ │ │ │ ├── Section.svelte │ │ │ │ │ ├── SublimeLogo.svelte │ │ │ │ │ ├── Testimonial.svelte │ │ │ │ │ ├── TestimonialCollection.svelte │ │ │ │ │ ├── Toasts.svelte │ │ │ │ │ ├── WeirStudioFileExplorer.svelte │ │ │ │ │ ├── WeirStudioStart.svelte │ │ │ │ │ ├── WeirStudioWorkspace.svelte │ │ │ │ │ ├── WordPressLogo.svelte │ │ │ │ │ ├── ZedLogo.svelte │ │ │ │ │ └── icons/ │ │ │ │ │ ├── CheckIcon.svelte │ │ │ │ │ ├── ChevronLeftIcon.svelte │ │ │ │ │ ├── ChevronRightIcon.svelte │ │ │ │ │ ├── CloseIcon.svelte │ │ │ │ │ ├── DownloadIcon.svelte │ │ │ │ │ ├── EditIcon.svelte │ │ │ │ │ ├── PlayIcon.svelte │ │ │ │ │ ├── PlusIcon.svelte │ │ │ │ │ └── TrashIcon.svelte │ │ │ │ └── db/ │ │ │ │ ├── index.ts │ │ │ │ ├── models/ │ │ │ │ │ ├── ProblematicLints.ts │ │ │ │ │ └── UninstallFeedback.ts │ │ │ │ └── schema.ts │ │ │ └── routes/ │ │ │ ├── +layout.svelte │ │ │ ├── +page.svelte │ │ │ ├── api/ │ │ │ │ ├── problematic-lints/ │ │ │ │ │ └── +server.ts │ │ │ │ └── uninstall-feedback/ │ │ │ │ └── +server.ts │ │ │ ├── cache-healthcheck/ │ │ │ │ └── +server.ts │ │ │ ├── docs/ │ │ │ │ ├── about/ │ │ │ │ │ ├── +page.md │ │ │ │ │ └── +page.ts │ │ │ │ ├── contributors/ │ │ │ │ │ ├── architecture/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── author-a-rule/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── brill/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── chrome-extension/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── committing/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── dictionary/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── environment/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── faq/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── introduction/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── local-stats/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── obsidian/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── review/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── tests/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── visual-studio-code/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ └── wordpress/ │ │ │ │ │ └── +page.md │ │ │ │ ├── harperjs/ │ │ │ │ │ ├── CDN/ │ │ │ │ │ │ ├── +page.md │ │ │ │ │ │ └── example/ │ │ │ │ │ │ └── +server.ts │ │ │ │ │ ├── configurerules/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── introduction/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── linting/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── node/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ └── spans/ │ │ │ │ │ └── +page.md │ │ │ │ ├── integrations/ │ │ │ │ │ ├── chrome-extension/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── emacs/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── firefox-extension/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── helix/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── language-server/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── neovim/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── obsidian/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── sublime-text/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── visual-studio-code/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ ├── wordpress/ │ │ │ │ │ │ └── +page.md │ │ │ │ │ └── zed/ │ │ │ │ │ └── +page.md │ │ │ │ ├── rules/ │ │ │ │ │ └── +page.svelte │ │ │ │ └── weir/ │ │ │ │ └── +page.md │ │ │ ├── editor/ │ │ │ │ ├── +page.svelte │ │ │ │ └── +page.ts │ │ │ ├── install-browser-extension/ │ │ │ │ └── +page.svelte │ │ │ ├── languagedetection/ │ │ │ │ └── +page.svelte │ │ │ ├── latestversion/ │ │ │ │ └── +server.ts │ │ │ ├── presentation/ │ │ │ │ └── +page.svelte │ │ │ ├── report-problematic-lint/ │ │ │ │ └── +page.svelte │ │ │ ├── request-browser-support/ │ │ │ │ └── +page.svelte │ │ │ ├── stats/ │ │ │ │ └── +page.svelte │ │ │ ├── titlecase/ │ │ │ │ └── +page.svelte │ │ │ ├── uninstall-browser-extension/ │ │ │ │ └── +page.svelte │ │ │ ├── weir/ │ │ │ │ └── studio/ │ │ │ │ └── +page.svelte │ │ │ └── wpdemo/ │ │ │ └── +page.server.ts │ │ ├── static/ │ │ │ ├── browserconfig.xml │ │ │ └── site.webmanifest │ │ ├── svelte.config.js │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ └── vite.config.ts │ └── wordpress-plugin/ │ ├── .editorconfig │ ├── .gitignore │ ├── README.md │ ├── harper.php │ ├── package.json │ └── src/ │ └── harper/ │ ├── Box.ts │ ├── DataBlock.ts │ ├── DialectSelectRow.tsx │ ├── Highlighter.tsx │ ├── LintList.tsx │ ├── LintListItem.tsx │ ├── LintSettingList.tsx │ ├── LintSettingRow.tsx │ ├── LinterProvider.tsx │ ├── Logo.jsx │ ├── RichText.ts │ ├── SidebarControl.tsx │ ├── SidebarTabContainer.tsx │ ├── SuggestionControl.tsx │ ├── block.json │ ├── domUtils.ts │ ├── index.css │ ├── index.tsx │ ├── lintUtils.ts │ ├── useDialect.ts │ ├── useIgnoredLintState.ts │ ├── useLintBoxes.ts │ ├── useLintConfig.ts │ ├── usePersonalDictionary.ts │ └── useToggle.ts ├── pnpm-workspace.yaml ├── rust-toolchain.toml ├── rustfmt.toml └── weir_rules/ ├── AtLeasToLeast.weir ├── BelieveInPreposition.weir ├── BetterOffPhrase.weir ├── BluRayHyphen.weir ├── CauseItIsBecause.weir ├── ColdModalTypo.weir ├── DoubleCheckHyphen.weir ├── EachOthersPossessive.weir ├── EasyGoingCompoundAdjective.weir ├── ExistentialPluralAgreement.weir ├── ExitedExcitedContext.weir ├── FirstPersonModifierHyphen.weir ├── FullWithToOf.weir ├── HaveNegNoAny.weir ├── InAdjectiveMatter.weir ├── IntroCueCommaBeforeThanks.weir ├── IsBeenAuxSequence.weir ├── ItTimeAuxiliary.weir ├── KnowNothingVerb.weir ├── LookInto.weir ├── MakeupCompoundNoun.weir ├── OvertimeCompoundNoun.weir ├── PleasRequestVerb.weir ├── PostItNoteHyphen.weir ├── PrincipleToPrincipalRoleNoun.weir ├── RelayOnForRely.weir ├── SayTellYou.weir ├── SneakPeekPreview.weir ├── TheWhetherWeather.weir ├── ThereAfterCompound.weir ├── ThereMissingIsClause.weir ├── ThieveNoun.weir ├── ThinkKnowOff.weir ├── TomorrowPossessiveModifier.weir ├── WasComprisedOf.weir ├── WokVerbTypo.weir └── YourOutClauseAgreement.weir