Copy disabled (too large)
Download .txt
Showing preview only (11,929K chars total). Download the full file to get everything.
Repository: Automattic/harper
Branch: master
Commit: 8be8bbe327a5
Files: 1334
Total size: 34.8 MB
Directory structure:
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
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
target
build
*.pdf
node_modules
================================================
FILE: .editorconfig
================================================
root = true
[*]
end_of_line = lf
================================================
FILE: .envrc
================================================
use flake
================================================
FILE: .gitattributes
================================================
* text=auto eol=lf
quill_simple.html linguist-generated
github_textarea.html linguist-generated
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Platform**
What platform has the issue? Is it in Obsidian, Neovim, Visual Studio Code, Chrome, or Firefox? Something else?
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/report-false-positive.md
================================================
---
name: Report False Positive
about: Harper flagged something that's actually correct
title: ''
labels: bug, harper-core, linting, false-positive
---
**What got flagged?**
The text that was incorrectly flagged.
**Why is this incorrect?**
Brief explanation.
**Example of correct usage:**
[Your example here]
================================================
FILE: .github/ISSUE_TEMPLATE/report-grammatical-error.md
================================================
---
name: Report Grammatical Error
about: Harper missed a grammatical error
title: ''
labels: enhancement, harper-core, linting
---
**The Error**
Description of the error.
**Examples (2-3):**
1.
2.
**References**
Any grammar rules or resources that support this.
**Potential Edge Cases**
When might this not apply?
================================================
FILE: .github/ISSUE_TEMPLATE/suggest-a-feature.md
================================================
---
name: Suggest a Feature
about: Propose a new feature
title: ''
labels: enhancement
---
**What problem does this solve?**
Brief description.
**Proposed Solution**
How should it work?
**Examples**
Show, don't tell.
**Component**
- [ ] Core engine
- [ ] Plugin/Extension
- [ ] Other: _____
**Additional Context**
Any other relevant info.
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
================================================
FILE: .github/pull_request_template.md
================================================
# Issues
<!-- Link any relevant GitHub issues here. -->
<!-- If this PR resolves the issue(s), write closes/fixes/resolves before the issue number(s) (e.g. Fixes #____, closes #____). -->
# Description
<!-- Please include a summary of the change. -->
<!-- Any details that you think are important to review this PR? -->
<!-- Are there other PRs related to this one? -->
# Demo
<!-- Add a screenshot or a video demonstration when possible and necessary. -->
# How Has This Been Tested?
<!-- Please describe how you tested your changes. -->
# Checklist
<!-- Go over all the following points, and put an `x` in all the boxes that apply -->
- [ ] I have performed a self-review of my own code
- [ ] I have added tests to cover my changes
================================================
FILE: .github/workflows/binaries.yml
================================================
name: Binaries
on:
push:
branches: ["master"]
tags: ["v*"]
merge_group:
jobs:
binaries:
name: ${{ matrix.platform.project }} - ${{ matrix.platform.release_for }}
if: github.event.pull_request.draft == false
strategy:
matrix:
platform:
- release_for: Windows-x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
project: harper-ls
bin: harper-ls.exe
name: harper-ls-x86_64-pc-windows-msvc.zip
command: build
- release_for: macOS-x86_64
os: macOS-latest
target: x86_64-apple-darwin
project: harper-ls
bin: harper-ls
name: harper-ls-x86_64-apple-darwin.tar.gz
command: build
- release_for: macOS-aarch64
os: macOS-latest
target: aarch64-apple-darwin
project: harper-ls
bin: harper-ls
name: harper-ls-aarch64-apple-darwin.tar.gz
command: build
- release_for: Linux-x86_64-GNU
os: ubuntu-latest
target: x86_64-unknown-linux-gnu
project: harper-ls
bin: harper-ls
name: harper-ls-x86_64-unknown-linux-gnu.tar.gz
command: build
- release_for: Linux-aarch64-GNU
os: ubuntu-latest
target: aarch64-unknown-linux-gnu
project: harper-ls
bin: harper-ls
name: harper-ls-aarch64-unknown-linux-gnu.tar.gz
command: build
- release_for: Linux-x86_64-musl
os: ubuntu-latest
target: x86_64-unknown-linux-musl
project: harper-ls
bin: harper-ls
name: harper-ls-x86_64-unknown-linux-musl.tar.gz
command: build
- release_for: Linux-aarch64-musl
os: ubuntu-latest
target: aarch64-unknown-linux-musl
project: harper-ls
bin: harper-ls
name: harper-ls-aarch64-unknown-linux-musl.tar.gz
command: build
- release_for: Windows-x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
project: harper-cli
bin: harper-cli.exe
name: harper-cli-x86_64-pc-windows-msvc.zip
command: build
- release_for: macOS-x86_64
os: macOS-latest
target: x86_64-apple-darwin
project: harper-cli
bin: harper-cli
name: harper-cli-x86_64-apple-darwin.tar.gz
command: build
- release_for: macOS-aarch64
os: macOS-latest
target: aarch64-apple-darwin
project: harper-cli
bin: harper-cli
name: harper-cli-aarch64-apple-darwin.tar.gz
command: build
- release_for: Linux-x86_64-GNU
os: ubuntu-latest
target: x86_64-unknown-linux-gnu
project: harper-cli
bin: harper-cli
name: harper-cli-x86_64-unknown-linux-gnu.tar.gz
command: build
- release_for: Linux-aarch64-GNU
os: ubuntu-latest
target: aarch64-unknown-linux-gnu
project: harper-cli
bin: harper-cli
name: harper-cli-aarch64-unknown-linux-gnu.tar.gz
command: build
- release_for: Linux-x86_64-musl
os: ubuntu-latest
target: x86_64-unknown-linux-musl
project: harper-cli
bin: harper-cli
name: harper-cli-x86_64-unknown-linux-musl.tar.gz
command: build
- release_for: Linux-aarch64-musl
os: ubuntu-latest
target: aarch64-unknown-linux-musl
project: harper-cli
bin: harper-cli
name: harper-cli-aarch64-unknown-linux-musl.tar.gz
command: build
runs-on: ${{ matrix.platform.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Rust Cache
uses: Swatinem/rust-cache@v2.7.8
- name: Build binary
uses: houseabsolute/actions-rust-cross@v1
with:
command: ${{ matrix.platform.command }}
target: ${{ matrix.platform.target }}
args: "--locked --release --bin ${{ matrix.platform.project }}"
force-use-cross: ${{ matrix.platform.os == 'ubuntu-latest' }}
strip: true
- name: Package as archive
shell: bash
run: |
cd target/${{ matrix.platform.target }}/release
if [[ "${{ matrix.platform.os }}" == "windows-latest" ]]; then
7z a ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }}
else
tar czvf ../../../${{ matrix.platform.name }} ${{ matrix.platform.bin }}
fi
cd -
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform.bin }}-${{ matrix.platform.target }}
path: ${{ matrix.platform.name }}
- name: Release artifacts
if: startsWith(github.ref, 'refs/tags/v')
uses: ncipollo/release-action@v1
with:
artifacts: ${{ matrix.platform.name }}
allowUpdates: true
draft: true
================================================
FILE: .github/workflows/build_web.yml
================================================
name: Build Web
on:
push:
branches: ["master", "web-prod"]
pull_request:
branches: ["master"]
merge_group:
jobs:
build-web:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
- name: Retrieve version after install
id: nodenv
run: echo "node-version=$(node -v | sed 's/^v//')" >> $GITHUB_OUTPUT
- uses: redhat-actions/buildah-build@v2
with:
image: web
containerfiles: |
Dockerfile
build-args: |
NODE_VERSION=${{ steps.nodenv.outputs.node-version }}-slim
extra-args: |
--ulimit nofile=65536:65536
================================================
FILE: .github/workflows/chrome_plugin.yml
================================================
name: Chrome Plugin
on:
push:
branches: ["master"]
tags: ["v*"]
pull_request:
branches: ["master"]
merge_group:
env:
CARGO_TERM_COLOR: always
jobs:
chrome-plugin:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: extractions/setup-just@v2
- uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
- name: Enable Corepack
run: corepack enable
- uses: cargo-bins/cargo-binstall@main
- name: Install `wasm-pack`
run: cargo binstall wasm-pack --force --no-confirm
- name: Build Chrome Plugin
run: just build-chrome-plugin
- name: Build Firefox Plugin
run: just build-firefox-plugin
- name: Upload Chrome extension
uses: actions/upload-artifact@v4
with:
name: harper-chrome-plugin.zip
path: "packages/chrome-plugin/package/harper-chrome-plugin.zip"
- name: Upload Firefox extension
uses: actions/upload-artifact@v4
with:
name: harper-firefox-plugin.zip
path: "packages/chrome-plugin/package/harper-firefox-plugin.zip"
- name: Release artifacts
uses: ncipollo/release-action@v1
if: startsWith(github.ref, 'refs/tags/v')
with:
artifacts: "packages/chrome-plugin/package/*.zip"
allowUpdates: true
draft: true
================================================
FILE: .github/workflows/just_checks.yml
================================================
name: Just Checks
on:
push:
branches: ["master", "web-prod"]
pull_request:
branches: ["master"]
merge_group:
env:
CARGO_TERM_COLOR: always
jobs:
just-checks:
runs-on: ubuntu-latest
name: just ${{ matrix.task }}
strategy:
matrix:
task:
[
check-rust,
check-js,
test-rust,
test-harperjs,
test-vscode,
test-chrome-plugin,
test-firefox-plugin,
test-obsidian,
]
steps:
- uses: actions/checkout@v4
- uses: extractions/setup-just@v2
- name: Install pnpm
uses: pnpm/action-setup@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: rustfmt,clippy
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
- name: Enable Corepack
run: corepack enable
- name: Rust Cache
uses: Swatinem/rust-cache@v2.7.8
- uses: cargo-bins/cargo-binstall@main
- name: Install `wasm-pack`
run: cargo binstall wasm-pack --force --no-confirm
- name: Install `cargo hack`
run: cargo binstall cargo-hack --force --no-confirm
- name: Run `${{ matrix.task }}`
run: just ${{ matrix.task }}
================================================
FILE: .github/workflows/stale.yml
================================================
# Adapted from [Jeff Geerling's Stale Workflow](https://github.com/geerlingguy/mac-dev-playbook/blob/719de3569804fcf4974fc3a14f46f3ebb92989b2/.github/workflows/stale.yml)
---
name: Close inactive issues
"on":
schedule:
- cron: "0 2 * * *"
jobs:
close-issues:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
with:
days-before-stale: 60
days-before-close: 14
exempt-issue-labels: bug,pinned,security,planned
exempt-pr-labels: bug,pinned,security,planned
stale-issue-label: "stale"
stale-pr-label: "stale"
stale-issue-message: |
This issue has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 14 days. Thank you for your contribution!
close-issue-message: |
This issue has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.
stale-pr-message: |
This pr has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 14 days. Thank you for your contribution!
close-pr-message: |
This pr has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.
repo-token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/vscode_plugin.yml
================================================
name: VS Code Plugin
on:
push:
branches: ["master"]
tags: ["v*"]
merge_group:
jobs:
vscode-plugin:
name: ${{ matrix.platform.code_target }}
if: github.event.pull_request.draft == false
strategy:
matrix:
platform:
- os: windows-latest
rust_target: x86_64-pc-windows-msvc
code_target: win32-x64
- os: windows-latest
rust_target: aarch64-pc-windows-msvc
code_target: win32-arm64
- os: macOS-latest
rust_target: x86_64-apple-darwin
code_target: darwin-x64
- os: macOS-latest
rust_target: aarch64-apple-darwin
code_target: darwin-arm64
- os: ubuntu-latest
rust_target: x86_64-unknown-linux-gnu
code_target: linux-x64
- os: ubuntu-latest
rust_target: aarch64-unknown-linux-gnu
code_target: linux-arm64
- os: ubuntu-latest
rust_target: armv7-unknown-linux-gnueabihf
code_target: linux-armhf
- os: ubuntu-latest
rust_target: x86_64-unknown-linux-musl
code_target: alpine-x64
- os: ubuntu-latest
rust_target: aarch64-unknown-linux-musl
code_target: alpine-arm64
runs-on: ${{ matrix.platform.os }}
steps:
- uses: actions/checkout@v4
- uses: extractions/setup-just@v2
- uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
- name: Enable Corepack
run: corepack enable
- name: Build harper-ls
uses: houseabsolute/actions-rust-cross@v1
with:
target: ${{ matrix.platform.rust_target }}
args: "--locked --release --bin harper-ls"
force-use-cross: ${{ matrix.platform.os == 'ubuntu-latest' }}
strip: true
- name: Package extension
id: package_extension
shell: bash
run: |
bin_dir="packages/vscode-plugin/bin"
release_dir="target/${{ matrix.platform.rust_target }}/release"
mkdir "$bin_dir"
if [[ "${{ matrix.platform.os }}" == "windows-latest" ]]; then
cp "${release_dir}/harper-ls.exe" "$bin_dir"
else
cp "${release_dir}/harper-ls" "$bin_dir"
fi
just package-vscode ${{ matrix.platform.code_target }}
echo artifact=$(echo packages/vscode-plugin/*.vsix) >> $GITHUB_OUTPUT
- name: Release artifacts
if: startsWith(github.ref, 'refs/tags/v')
uses: ncipollo/release-action@v1
with:
artifacts: "./packages/vscode-plugin/*.vsix"
allowUpdates: true
draft: true
- name: Publish to OpenVSX
if: startsWith(github.ref, 'refs/tags/v')
uses: HaaLeo/publish-vscode-extension@v1
with:
pat: ${{ secrets.OPEN_VSX_TOKEN }}
packagePath: "./packages/vscode-plugin/"
extensionFile: ${{ steps.package_extension.outputs.artifact }}
skipDuplicate: true
- name: Publish to the Visual Studio Marketplace
if: startsWith(github.ref, 'refs/tags/v')
uses: HaaLeo/publish-vscode-extension@v1
with:
pat: ${{ secrets.VS_MARKETPLACE_TOKEN }}
packagePath: "./packages/vscode-plugin/"
extensionFile: ${{ steps.package_extension.outputs.artifact }}
registryUrl: https://marketplace.visualstudio.com
================================================
FILE: .github/workflows/wp_plugin.yml
================================================
name: WordPress Plugin
on:
push:
branches: ["master"]
tags: ["v*"]
pull_request:
branches: ["master"]
merge_group:
env:
CARGO_TERM_COLOR: always
jobs:
wp-plugin:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: extractions/setup-just@v2
- uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
- name: Enable Corepack
run: corepack enable
- uses: cargo-bins/cargo-binstall@main
- name: Install wasm-pack
run: cargo binstall wasm-pack --force --no-confirm
- name: Build
run: just build-wp
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: harper.zip
path: packages/wordpress-plugin/harper.zip
- name: Draft GitHub release
if: startsWith(github.ref, 'refs/tags/v')
uses: ncipollo/release-action@v1
with:
artifacts: packages/wordpress-plugin/harper.zip
allowUpdates: true
draft: true
================================================
FILE: .gitignore
================================================
target
build
.idea
.vscode
.DS_Store
*.pdf
node_modules
mariadb_data
# Ignore direnv files
.direnv/*
================================================
FILE: .node-version
================================================
lts/*
================================================
FILE: .npmrc
================================================
registry=https://registry.npmjs.org
================================================
FILE: AGENTS.md
================================================
# Harper Docs Map for Agents
This repository’s documentation site is powered by Vite + SvelteKit + SveltePress.
Use `packages/web/vite.config.ts` as the source of truth for documentation scope:
- Sidebar and important doc routes are defined in `packages/web/vite.config.ts`.
- Route `/docs/...` maps to `packages/web/src/routes/docs/...`.
- Most docs are in `+page.md`; some are `+page.svelte` or route helpers.
If you're working on the Harper repository itself, please pay special attention to the `contributors/*` pages.
Importantly, all of the tools available in this repository are available via `just`. To learn more, run `just --list`.
## Read First
1. `packages/web/vite.config.ts`: Sidebar source of truth and canonical map of important docs routes.
2. `packages/web/src/routes/docs/about/+page.md`: High-level product overview, privacy model, versioning policy, and ecosystem context.
3. `packages/web/src/routes/docs/weir/+page.md`: Weir rule language reference with syntax, expression types, and examples.
4. `packages/web/src/routes/docs/rules/+page.svelte`: Live/generated rule catalog (rule names, defaults, and descriptions).
5. `packages/web/src/routes/docs/contributors/introduction/+page.md`: Entry point for contributors and links to deeper contributor docs.
## Core Documentation Directories
- `packages/web/src/routes/docs/about`
- `packages/web/src/routes/docs/weir`
- `packages/web/src/routes/docs/rules`
- `packages/web/src/routes/docs/integrations`
- `packages/web/src/routes/docs/harperjs`
- `packages/web/src/routes/docs/contributors`
## Route Prefix to File Prefix
- `/docs/about` -> `packages/web/src/routes/docs/about/+page.md`
- `/docs/weir` -> `packages/web/src/routes/docs/weir/+page.md`
- `/docs/rules` -> `packages/web/src/routes/docs/rules/+page.svelte`
- `/docs/integrations/*` -> `packages/web/src/routes/docs/integrations/*/+page.md`
- `/docs/harperjs/*` -> `packages/web/src/routes/docs/harperjs/*/+page.md`
- `/docs/contributors/*` -> `packages/web/src/routes/docs/contributors/*/+page.md`
## Files Listed in the Sidebar (Local)
- `packages/web/src/routes/docs/about/+page.md`: High-level product overview, privacy model, versioning policy, and ecosystem context.
- `packages/web/src/routes/docs/weir/+page.md`: Weir rule language reference with syntax, expression types, and examples. Very important if you're asked to write a Weir rule.
- `packages/web/src/routes/docs/rules/+page.svelte`: Live/generated rule catalog (rule names, defaults, and descriptions).
- `packages/web/src/routes/docs/integrations/obsidian/+page.md`: Obsidian plugin overview, privacy/value comparison, installation, and support links.
- `packages/web/src/routes/docs/integrations/chrome-extension/+page.md`: End-user Chrome extension overview and install link.
- `packages/web/src/routes/docs/integrations/firefox-extension/+page.md`: End-user Firefox extension overview and install link.
- `packages/web/src/routes/docs/integrations/wordpress/+page.md`: Current WordPress guidance, including migration recommendation to Chrome extension and legacy plugin status.
- `packages/web/src/routes/docs/integrations/language-server/+page.md`: `harper-ls` install methods, dictionaries, code actions, ignore comments, and full configuration reference.
- `packages/web/src/routes/docs/integrations/visual-studio-code/+page.md`: VS Code extension install, command list, and settings reference.
- `packages/web/src/routes/docs/integrations/neovim/+page.md`: Neovim setup using `harper-ls`, plus optional and common config tweaks.
- `packages/web/src/routes/docs/integrations/helix/+page.md`: Helix setup using `harper-ls`, plus optional and common config tweaks.
- `packages/web/src/routes/docs/integrations/emacs/+page.md`: Emacs setup using `harper-ls`, plus optional and common config tweaks.
- `packages/web/src/routes/docs/integrations/zed/+page.md`: Zed extension entry point and link to canonical extension README.
- `packages/web/src/routes/docs/integrations/sublime-text/+page.md`: Sublime Text setup with `harper-ls` and LSP package configuration.
- `packages/web/src/routes/docs/harperjs/introduction/+page.md`: `harper.js` mission, package overview, and installation starting point.
- `packages/web/src/routes/docs/harperjs/linting/+page.md`: Core `harper.js` lint workflow and linter usage patterns.
- `packages/web/src/routes/docs/harperjs/spans/+page.md`: Explains span objects and how to use them to locate/handle lint ranges.
- `packages/web/src/routes/docs/harperjs/configurerules/+page.md`: How to programmatically read and set `LintConfig` to enable/disable rules.
- `packages/web/src/routes/docs/harperjs/node/+page.md`: Node.js-specific usage notes, especially `LocalLinter` vs `WorkerLinter`.
- `packages/web/src/routes/docs/harperjs/CDN/+page.md`: Browser/CDN usage via unpkg and ESM import patterns.
- `packages/web/src/routes/docs/contributors/introduction/+page.md`: Contributor onboarding overview and links to architecture/testing/rule-authoring docs.
- `packages/web/src/routes/docs/contributors/environment/+page.md`: Local development environment setup across Rust, Node/pnpm, and optional Nix shell.
- `packages/web/src/routes/docs/contributors/committing/+page.md`: Commit message conventions and commit hygiene requirements.
- `packages/web/src/routes/docs/contributors/architecture/+page.md`: System architecture and roles of core components like `harper-core`, `harper-ls`, and `harper.js`.
- `packages/web/src/routes/docs/contributors/dictionary/+page.md`: Process for adding or updating curated dictionary entries.
- `packages/web/src/routes/docs/contributors/tests/+page.md`: Test-suite strategy, quality/performance focus, and related testing references.
- `packages/web/src/routes/docs/contributors/author-a-rule/+page.md`: Step-by-step workflow for implementing and testing new grammar rules.
- `packages/web/src/routes/docs/contributors/visual-studio-code/+page.md`: How to run, debug, test, and package the VS Code extension locally.
- `packages/web/src/routes/docs/contributors/chrome-extension/+page.md`: Internal architecture and local development notes for the browser extensions.
- `packages/web/src/routes/docs/contributors/wordpress/+page.md`: How to build and run the WordPress plugin locally.
- `packages/web/src/routes/docs/contributors/obsidian/+page.md`: Obsidian-plugin contributor workflow and plugin-specific constraints.
- `packages/web/src/routes/docs/contributors/review/+page.md`: PR reviewer playbook, including ways to fetch artifacts and test patches locally.
- `packages/web/src/routes/docs/contributors/local-stats/+page.md`: Local stats logging model, `stats.txt` format, locations, and privacy behavior.
- `packages/web/src/routes/docs/contributors/brill/+page.md`: Brief explanation of Harper’s Brill-tagging approach and further reading link.
- `packages/web/src/routes/docs/contributors/faq/+page.md`: Contributor FAQ for conceptual distinctions (for example `Linter` vs `PatternLinter`).
## Documentation Route Helpers (Non-`+page.md`)
- `packages/web/src/routes/docs/about/+page.ts`: Route behavior helper (`ssr = false`) for the About page.
- `packages/web/src/routes/docs/harperjs/CDN/example/+server.ts`: Serves the HTML example used by the `harper.js` CDN documentation page.
## External Sidebar Targets (No Local Source File)
- `https://docs.rs/harper-core/latest/harper_core/`
- `/docs/harperjs/ref/index.html` (generated API reference target)
## Projects Contained in This Repository
- `harper-core`: The core grammar checking engine. This is a dependency to pretty much everything related to Harper.
- `harper-ls`: A Language Server compatible with a number of text editors, including Neovim, Zed, and Helix. See above linked documentation for more details.
- `harper-cli`: A command-line binary for debugging Harper's core engine and markup language support.
- `harper-comments`: Provides parsers for a number of programming languages to support linting their comments.
- `harper-wasm`: The WebAssembly build target that powers browser and JavaScript integrations such as `harper.js`.
- `packages/lint-framework`: A package containing the tooling necessary to read/write/highlight text on the web for the purpose of linting.
- `packages/components`: Shared Svelte component package used by web-facing packages.
- `packages/web`: The Harper website, including documentation and a live demo that uses the `lint-framework`.
- `packages/harper.js`: The JavaScript package that uses `harper-wasm` to lint text from websites or Node.js processes.
- `packages/chrome-plugin`: The Harper Chrome Extension - uses the `lint-framework`. Also support Firefox.
- `packages/obsidian-plugin`
- `packages/wordpress-plugin`
- `packages/vscode-plugin`: The Harper Visual Studio Code plugin. Uses `harper-ls`.
There are of course projects in this repository not listed above. If relevant, feel free to poke around.
## On Writing New Rules
When asked to write a new rule, keep these guidelines in mind:
- The user is almost always expecting you to write it to a file. Which file and where is up to you to find out.
- You should include at least 15 total tests, covering a wide variety of cases. Cover false-positives, false negatives, true positives, and if relevant, true negatives.
- You should run any and all tests to ensure that you do no break existing behavior and that your new rule runs the way you expect.
- If the rule is related to a closed compound noun, see if you can just add an entry to the existing closed compound linter.
Unless you are specifically requested to write the rule in a specific way, choose the language (Rust or Weir) and methodology that fits the task.
ALWAYS run extensive bullet tests with `cargo run --bin harper-cli --release -- lint <TEXT>` to make sure the new rule isn't already covered by Harper.
## Workflow for Writing Weir Rules
1. Draft the core expression
- Encode the match with `expr main` using words, sequences, alternatives, filters, exceptions, POS tags, wildcards, or punctuation.
- Keep the expression minimal but precise; avoid overmatching.
- If a wordlist is needed, include it as its own expression, used with an expression reference.
2. Add rule metadata
- `let message`, `let description`, `let kind`, `let becomes` (and `let strategy` if needed).
- Use `strategy "Exact"` when casing must be normalized; otherwise default behavior or `MatchCase` as appropriate.
3. Add tests (required)
- Include at least 15 tests.
- Tests must cover: true positives, false positives, false negatives, and (if relevant) true negatives.
- Prefer a mix of casing, punctuation, whitespace, and nearby-token variations.
4. Sanity-check edge cases
- Ensure exceptions do not block valid matches.
- Ensure replacements are correct and not destructive.
5. Run the tests.
- Fix any issues that arise.
### Output Format
Write a Weir rule to a new file with a name of your choosing, including `expr main`, `let` fields, and tests. Make sure it has the extension `.weir`.
================================================
FILE: ARCHITECTURE.md
================================================
# Harper's Architecture
This document has been moved to the [online documentation](https://writewithharper.com/docs/contributors/architecture).
================================================
FILE: COMPARISON.md
================================================
# Comparison to Other Grammar Checkers
| | Suggestion Time | License | LSP Support | Ruleset | Multi-Lingual/Multi-Dialect |
| ------------ | --------------- | ------------------------ | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | --------------------------- |
| Harper | 10ms | Apache-2.0 | ✅ | [Custom](https://github.com/automattic/harper/tree/master/harper-core/src/linting) | ❌ |
| LanguageTool | 650ms | LGPL-2.1 | 🟨 Through [ltex-ls](https://github.com/valentjn/ltex-ls) | [Custom](https://community.languagetool.org/rule/list?lang=en) + N-Gram Based + LLM Based | 🟨 Not simultaneously |
| hunspell | | LGPL/GPL/MPL tri-license | ❌ | hunspell/MySpell | 🟨 Not simultaneously |
| Grammarly | 4000ms | Proprietary | 🟨 Through [grammarly-language-server](https://github.com/emacs-grammarly/grammarly-language-server) | Proprietary | ❌ |
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
This page has been moved to [the main documentation](https://writewithharper.com/docs/contributors/introduction).
================================================
FILE: Cargo.toml
================================================
[workspace]
members = ["harper-cli", "harper-core", "harper-ls", "harper-comments", "harper-wasm", "harper-tree-sitter", "harper-html", "harper-literate-haskell", "harper-typst", "harper-stats", "harper-pos-utils", "harper-brill", "harper-ink", "harper-python", "harper-jjdescription", "harper-thesaurus", "harper-asciidoc", "fuzz", "harper-tex"]
resolver = "2"
[profile.test]
opt-level = 1
[profile.test.package."*"]
opt-level = 3
[profile.release]
opt-level = 3
panic = "abort"
lto = "fat"
# Stripping binaries triggers a bug in `wasm-opt`.
# Disable it for now.
# strip = true
# Release profile with debug info.
# Useful for debugging and profiling.
[profile.release-debug]
inherits = "release"
debug = 2
================================================
FILE: Dockerfile
================================================
# This Dockerfile is for the Harper website and web services.
# You do not need it to use Harper.
ARG NODE_VERSION=24
FROM rust:latest AS wasm-build
RUN rustup toolchain install
RUN apt-get update -y && apt-get install clang -y
RUN mkdir -p /usr/build/
WORKDIR /usr/build/
RUN cargo install wasm-pack
COPY . .
WORKDIR /usr/build/harper-wasm
RUN wasm-pack build --target web
RUN cargo clean
FROM node:${NODE_VERSION} AS node-build
RUN apt-get update && apt-get install git parallel -y
RUN corepack enable
RUN mkdir -p /usr/build/
WORKDIR /usr/build/
COPY . .
COPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg
RUN pnpm install --engine-strict=false --shamefully-hoist
WORKDIR /usr/build/packages/components
RUN pnpm install --engine-strict=false --shamefully-hoist
RUN pnpm build
WORKDIR /usr/build/packages/harper.js
RUN pnpm build && ./docs.sh
WORKDIR /usr/build/packages/lint-framework
RUN pnpm build
WORKDIR /usr/build/packages/web
RUN pnpm install --engine-strict=false --shamefully-hoist
RUN pnpm build
FROM node:${NODE_VERSION}
COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules
COPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build
COPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle
COPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json
WORKDIR /usr/build/packages/web/build
ENV HOST=0.0.0.0
ENV PORT=3000
ENTRYPOINT ["node", "index"]
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2024 Elijah Potter
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
<div id="header" align="center">
<img src="logo.svg" width="400px" />
<h1>Harper</h1>
</div>
[](https://github.com/automattic/harper/actions/workflows/binaries.yml)
[](https://github.com/automattic/harper/actions/workflows/build_web.yml)
[](https://github.com/automattic/harper/actions/workflows/just_checks.yml)
[](https://crates.io/crates/harper-ls)



Harper is an English grammar checker designed to be _just right._
I created it after years of dealing with the shortcomings of the competition.
Grammarly was too expensive and too overbearing.
Its suggestions lacked context, and were often just plain _wrong_.
Not to mention: it's a privacy nightmare.
Everything you write with Grammarly is sent to their servers.
Their privacy policy claims they don't sell the data, but that doesn't mean they don't use it to train large language models and god knows what else.
Not only that, but the round-trip-time of the network request makes revising your work all the more tedious.
LanguageTool is great, if you have gigabytes of RAM to spare and are willing to download the ~16GB n-gram dataset.
Besides the memory requirements, I found LanguageTool too slow: it would take several seconds to lint even a moderate-size document.
That's why I created Harper: it is the grammar checker that fits my needs.
Not only does it take milliseconds to lint a document, take less than 1/50th of LanguageTool's memory footprint,
but it is also completely private.
Harper is even small enough to load via [WebAssembly.](https://writewithharper.com)
## Language Support
Harper currently only supports English, but the core is extensible to support other languages, so we welcome contributions that allow for other language support.
## Performance Issues
We consider long lint times bugs.
If you encounter any significant performance issues, please create an issue on the topic.
If you find a fix to any performance issue, we would appreciate the contribution.
Just please make sure to read [our contribution guidelines first.](https://writewithharper.com/docs/contributors/introduction)
## Links
- [Frequently Asked Questions](https://writewithharper.com/#faqs)
- [Obsidian Documentation](https://writewithharper.com/docs/integrations/obsidian)
- [`harper-ls` Documentation](https://writewithharper.com/docs/integrations/language-server)
- Supported Editors' Documentation
- [Visual Studio Code](https://writewithharper.com/docs/integrations/visual-studio-code)
- [Neovim](https://writewithharper.com/docs/integrations/neovim)
- [Helix](https://writewithharper.com/docs/integrations/helix)
- [Emacs](https://writewithharper.com/docs/integrations/emacs)
- [Zed](https://writewithharper.com/docs/integrations/zed)
- [`harper.js` Documentation](https://writewithharper.com/docs/harperjs/introduction)
- [Official Discord Server](https://discord.com/invite/JBqcAaKrzQ)
## Huge Thanks
This project would not be possible without the hard work from those who [contribute](https://writewithharper.com/docs/contributors/introduction).
<a href="https://github.com/automattic/harper/graphs/contributors">
<img src="https://contrib.rocks/image?repo=automattic/harper" />
</a>
Harper's logo was designed by [Lukas Werner](https://lukaswerner.com/).
================================================
FILE: biome.json
================================================
{
"$schema": "https://biomejs.dev/schemas/2.3.3/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": true,
"includes": [
"**/packages/**/*",
"**/*.json",
"!**/test-results",
"!**/node_modules",
"!**/mariadb_data",
"!**/dist",
"!**/target",
"!**/build",
"!**/temp",
"!**/*.zip",
"!**/*.rs",
"!**/harper-wasm/pkg",
"!**/.vscode-test",
"!**/.svelte-kit",
"!**/.sveltepress",
"!**/packages/obsidian-plugin/main.js",
"!**/pnpm-lock.yaml",
"!**/package-lock.json",
"!**/playwright-report",
"!**/yarn.lock"
]
},
"css": {
"parser": {
"tailwindDirectives": true
}
},
"formatter": {
"enabled": true,
"lineWidth": 100,
"indentStyle": "tab",
"useEditorconfig": true
},
"assist": {
"actions": {
"source": {
"organizeImports": "on"
}
}
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"suspicious": {
"noExplicitAny": "off",
"noArrayIndexKey": "off",
"noLabelVar": "warn",
"noDoubleEquals": "off"
},
"a11y": {
"noSvgWithoutTitle": "off",
"useGenericFontNames": "warn"
},
"correctness": {
"useExhaustiveDependencies": "off",
"noUnusedVariables": "off"
},
"style": {
"noParameterAssign": "off",
"noNonNullAssertion": "off",
"noUselessElse": "off",
"useNodejsImportProtocol": "off",
"useAsConstAssertion": "error",
"useDefaultParameterLast": "error",
"useEnumInitializers": "error",
"useSelfClosingElements": "error",
"useSingleVarDeclarator": "error",
"noUnusedTemplateLiteral": "error",
"useNumberNamespace": "error",
"noInferrableTypes": "error"
},
"complexity": {
"noForEach": "off",
"noStaticOnlyClass": "off",
"noThisInStatic": "off",
"noArguments": "off",
"noUselessFragments": "off"
}
}
},
"javascript": {
"formatter": {
"quoteStyle": "single"
}
},
"overrides": [
{
"includes": ["**/*.svelte", "**/*.astro", "**/*.vue"],
"linter": {
"rules": {
"correctness": {
"noUnusedImports": "off"
},
"style": {
"useConst": "off",
"useImportType": "off"
}
}
}
}
]
}
================================================
FILE: demo.md
================================================
There are some cases where the the standard grammar
checkers don't cut it. That;s where Harper comes in handy.
Harper is an language checker for developers. It can detect
improper capitalization and misspellled words,
as well as a number of other issues.
Like if you break up words you shoul dn't.
Harper can be an lifesaver when writing technical documents,
emails or other formal forms of communication.
Harper works everywhere, even when you're not online. Since your data
never leaves your device, you don't ned too worry aout us
selling it or using it to train large language models.
The best part: Harper can give you feedback instantly.
For most documents, Harper can serve up suggestions in
under 10 ms, faster that Grammarly.
================================================
FILE: docker-compose.dev.yml
================================================
# This Docker compose file is for development of the Harper website and web services.
# You do not need it to use Harper.
services:
db:
image: mariadb:lts
restart: always
environment:
MARIADB_ROOT_PASSWORD: password
MARIADB_DATABASE: harper
MARIADB_USER: devuser
MARIADB_PASSWORD: password
ports:
- "3306:3306"
volumes:
- ./mariadb_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost"]
interval: 5s
timeout: 5s
retries: 10
================================================
FILE: docker-compose.yml
================================================
# This Docker compose file is for development of the Harper website and web services.
# You do not need it to use Harper.
services:
site:
build:
dockerfile: Dockerfile
restart: always
ports:
- "3000:3000"
environment:
- ORIGIN=http://localhost:3000
- DATABASE_URL=mysql://devuser:password@db:3306/harper
depends_on:
db:
condition: service_healthy
db:
image: mariadb:lts
restart: always
environment:
MARIADB_ROOT_PASSWORD: password
MARIADB_DATABASE: harper
MARIADB_USER: devuser
MARIADB_PASSWORD: password
ports:
- "3306:3306"
volumes:
- ./mariadb_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost"]
interval: 5s
timeout: 5s
retries: 10
================================================
FILE: flake.nix
================================================
{
inputs = {
utils.url = "github:numtide/flake-utils";
};
outputs =
{
self,
nixpkgs,
utils,
}:
utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
};
in
{
devShell =
with pkgs;
mkShell {
buildInputs = [
just
bash
parallel
rustup
gcc
pnpm
nodejs
wasm-pack
zip
wasm-bindgen-cli_0_2_100
];
shellHook = ''
echo "
YSOKGECAACDFIMRVZ
YQHAAAAABDFFDBAAAAABU
WKAAAFNTWZ ZWTQNNY
ZTPMIFDCAAAAAEJPUZ ZKAADOX
ZTJBAAABFHJMMMMLFAAAAGRZ YFAAKZ
XDAAELSW ZVQIAADQZ QAAL
ZPNW VIAACOZ VTZ
YPLIGDBBDFIKPY VIABX YOKIFDABDGILPY
TJAAABEILLIFCAAAJT WW ZSIAAACFIMLHEBAABKU
UEAADNW XNEAADT SDAAEOX WMDAAEV
YTTTNAACT UDAAM ZLAAEV TCAAOTTTY
WBAAAAAFX YGAAM KAAHY XEAAAAACX
YAAAAACZ ZEAAJMMMMMMIGIMMMMMMIAAFZ YBAAAAAZ
YAAAAAK JAAAAAAAAAAAAAAAAAAAAAL IAAAAAZ
TNDAAT TAAAAAAAAAAAAAAAAAAAAAV RAAENU
KAAM NAAGTTTTTTRORTTTTTTFAAP KAAM
UAAC EAAU RAAF ZBAAW
NAAHX XIAAM KAAJY WGAAO
OAABNX XOBAAM ZLAACOY XMAAAP
UEAAAGQVY ZVQHAAAET SDAAAHRVZ YVPGAAAFV
VNDAAAABEFBAAAADMV UMCAAAABFEBAAAAENW
VRPMKHHJMORV UROMJHHKMPRW
"
'';
};
}
);
}
================================================
FILE: fuzz/.gitignore
================================================
target
corpus
artifacts
coverage
================================================
FILE: fuzz/Cargo.toml
================================================
[package]
name = "fuzz"
version = "0.0.0"
publish = false
edition = "2024"
[package.metadata]
cargo-fuzz = true
[dependencies]
libfuzzer-sys = "0.4"
harper-core = { path = "../harper-core" }
harper-typst = { path = "../harper-typst" }
harper-literate-haskell = { path = "../harper-literate-haskell" }
harper-html = { path = "../harper-html" }
harper-comments = { path = "../harper-comments" }
[[bin]]
name = "fuzz_harper_typst"
path = "fuzz_targets/fuzz_harper_typst.rs"
test = false
doc = false
bench = false
[[bin]]
name = "fuzz_harper_literate_haskell"
path = "fuzz_targets/fuzz_harper_literate_haskell.rs"
test = false
doc = false
bench = false
[[bin]]
name = "fuzz_harper_html"
path = "fuzz_targets/fuzz_harper_html.rs"
test = false
doc = false
bench = false
[[bin]]
name = "fuzz_harper_comment"
path = "fuzz_targets/fuzz_harper_comment.rs"
test = false
doc = false
bench = false
[[bin]]
name = "fuzz_harper_core_markdown"
path = "fuzz_targets/fuzz_harper_core_markdown.rs"
test = false
doc = false
bench = false
================================================
FILE: fuzz/README.md
================================================
# cargo-fuzz targets
## Setup
Follow the rust-fuzz [setup guide](https://rust-fuzz.github.io/book/cargo-fuzz/setup.html).
You need a nightly toolchain and the cargo-fuzz plugin.
Simple installation steps:
- `rustup install nightly`
- `cargo install cargo-fuzz`
## Adding a new fuzzing target
To add a new target, run `cargo fuzz add $TARGET_NAME`
## Doing a fuzzing run
If possible, prefill the `fuzz/corpus/$TARGET_NAME` directory with appropriate examples to speed up fuzzing.
The fuzzer should be coverage aware, so providing a well formed input document to fuzzing targets only expecting a string as input can speed things up a lot.
Then, run `cargo +nightly fuzz run $TARGET_NAME -- -timeout=$TIMEOUT`
The timeout flag accepts a timeout in seconds, after which a long-running test case will be aborted.
This should be set to a low number to quickly report endless loops / deep recursion in parsers.
The normal fuzzing run will continue until a crash is found.
Alternatively, if you want to run all the fuzzing targets at once: `cargo +nightly fuzz list | parallel -j0 cargo +nightly fuzz run {} -- -timeout=$TIMEOUT`
## Minifying a test case
Once the fuzzer finds a crash, we probably want to minify the result.
This can be done with `CARGO_PROFILE_RELEASE_LTO=false cargo +nightly fuzz tmin $TARGET $TEST_CASE_PATH`
================================================
FILE: fuzz/fuzz_targets/fuzz_harper_comment.rs
================================================
#![no_main]
use harper_core::parsers::{MarkdownOptions, StrParser};
use libfuzzer_sys::arbitrary::{Arbitrary, Result, Unstructured};
use libfuzzer_sys::fuzz_target;
#[derive(Debug)]
struct Language(String);
const LANGUAGES: [&str; 34] = [
"cmake",
"cpp",
"csharp",
"c",
"dart",
"go",
"haskell",
"javascriptreact",
"javascript",
"java",
"kotlin",
"lua",
"nix",
"php",
"powershell",
"python",
"ruby",
"rust",
"scala",
"shellscript",
"solidity",
"swift",
"toml",
"typescriptreact",
"typescript",
"clojure",
"go",
"lua",
"java",
"javascriptreact",
"typescript",
"typescriptreact",
"solidity",
"zig",
];
impl<'a> Arbitrary<'a> for Language {
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
let &lang = u.choose(&LANGUAGES)?;
Ok(Language(lang.to_owned()))
}
}
#[derive(Debug)]
struct Input {
language: Language,
text: String,
}
impl<'a> Arbitrary<'a> for Input {
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
let (language, text) = Arbitrary::arbitrary(u)?;
Ok(Input { language, text })
}
fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self> {
let (language, text) = Arbitrary::arbitrary_take_rest(u)?;
Ok(Input { language, text })
}
}
fuzz_target!(|data: Input| {
let opts = MarkdownOptions::default();
let parser = harper_comments::CommentParser::new_from_language_id(&data.language.0, opts);
if let Some(parser) = parser {
let _res = parser.parse_str(&data.text);
}
});
================================================
FILE: fuzz/fuzz_targets/fuzz_harper_core_markdown.rs
================================================
#![no_main]
use harper_core::parsers::{Markdown, MarkdownOptions, StrParser};
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &str| {
let opts = MarkdownOptions::default();
let parser = Markdown::new(opts);
let _res = parser.parse_str(data);
});
================================================
FILE: fuzz/fuzz_targets/fuzz_harper_html.rs
================================================
#![no_main]
use harper_core::parsers::StrParser;
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &str| {
let parser = harper_html::HtmlParser::default();
let _res = parser.parse_str(data);
});
================================================
FILE: fuzz/fuzz_targets/fuzz_harper_literate_haskell.rs
================================================
#![no_main]
// use harper_core::parsers::StrParser;
use libfuzzer_sys::fuzz_target;
fuzz_target!(|_data: &str| {
// TODO: figure out how to create a literate haskell parser
// let _res = typst.parse_str(&data);
});
================================================
FILE: fuzz/fuzz_targets/fuzz_harper_typst.rs
================================================
#![no_main]
use harper_core::parsers::StrParser;
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &str| {
let typst = harper_typst::Typst;
let _res = typst.parse_str(data);
});
================================================
FILE: harper-asciidoc/Cargo.toml
================================================
[package]
name = "harper-asciidoc"
version = "1.12.0"
edition = "2024"
description = "The language checker for developers."
license = "Apache-2.0"
repository = "https://github.com/automattic/harper"
[dependencies]
harper-core = { path = "../harper-core", version = "1.0.0" }
harper-tree-sitter = { path = "../harper-tree-sitter", version = "1.0.0" }
tree-sitter-asciidoc = "0.6.0"
tree-sitter = "0.25.10"
[dev-dependencies]
paste = "1.0.15"
================================================
FILE: harper-asciidoc/src/lib.rs
================================================
use harper_core::parsers::{self, Parser, PlainEnglish};
use harper_core::{Token, TokenKind};
use harper_tree_sitter::TreeSitterMasker;
use tree_sitter::Node;
pub struct AsciidocParser {
inner: parsers::Mask<TreeSitterMasker, PlainEnglish>,
}
impl AsciidocParser {
fn node_condition(n: &Node) -> bool {
matches!(
n.kind(),
"line" | "body" | "table_cell_content" | "author" | "ident_block_line"
)
}
}
impl Default for AsciidocParser {
fn default() -> Self {
Self {
inner: parsers::Mask::new(
TreeSitterMasker::new(tree_sitter_asciidoc::language(), Self::node_condition),
PlainEnglish,
),
}
}
}
impl Parser for AsciidocParser {
fn parse(&self, source: &[char]) -> Vec<Token> {
let mut tokens = self.inner.parse(source);
for token in &mut tokens {
if let TokenKind::Space(v) = &mut token.kind {
*v = (*v).clamp(0, 1);
}
}
tokens
}
}
================================================
FILE: harper-asciidoc/tests/asciidoc_tests.rs
================================================
use harper_asciidoc::AsciidocParser;
use harper_core::linting::{LintGroup, Linter};
use harper_core::spell::FstDictionary;
use harper_core::{Dialect, Document};
/// Creates a unit test checking Asciidoc source code parsing.
macro_rules! create_test {
($filename:ident.$ext:ident, $correct_expected:expr) => {
paste::paste! {
#[test]
fn [<lints_$ext _ $filename _correctly>](){
let source = include_str!(
concat!(
"./test_sources/",
concat!(
stringify!($filename), ".", stringify!($ext))
)
);
let parser = AsciidocParser::default();
let dict = FstDictionary::curated();
let document = Document::new(&source, &parser, &dict);
let mut linter = LintGroup::new_curated(dict, Dialect::American);
let lints = linter.lint(&document);
dbg!(&lints);
assert_eq!(lints.len(), $correct_expected);
// Make sure that all generated tokens span real characters
for token in document.tokens(){
assert!(token.span.try_get_content(document.get_source()).is_some());
}
}
}
};
}
create_test!(basic.adoc, 2);
create_test!(table.adoc, 1);
create_test!(comment.adoc, 2);
create_test!(comprehensive.adoc, 13);
================================================
FILE: harper-asciidoc/tests/test_sources/basic.adoc
================================================
= This is a titlle
This is a basic paragraph with a typo here: mstakes.
================================================
FILE: harper-asciidoc/tests/test_sources/comment.adoc
================================================
// This is a comment with a typo: spelll
// Another line of the same comment.
================================================
FILE: harper-asciidoc/tests/test_sources/comprehensive.adoc
================================================
= Document Title
Author Name <author@example.com>
:revdate: 2026-01-01
:custom-attr: Value with typpo.
This is a paragraph with a deliberate typpo.
== Section Titlre
* List item with errorr
* Another item
.Block Titlle
[NOTE]
====
Admonition with mistacke.
====
|===
| Header with errorr | Header 2
| Cell with typpo | Cell 1.2
|===
// Comment with mistacke.
////
Block comment with errorr.
////
Indented block:
This has a typpo too.
Term with errorr::
Definition with mistacke.
================================================
FILE: harper-asciidoc/tests/test_sources/table.adoc
================================================
|===
| Cell 1 | Cell 2, but with a typo: errorr
|===
================================================
FILE: harper-brill/Cargo.toml
================================================
[package]
name = "harper-brill"
version = "1.12.0"
edition = "2024"
description = "The language checker for developers."
license = "Apache-2.0"
repository = "https://github.com/automattic/harper"
[dependencies]
harper-pos-utils = { path = "../harper-pos-utils/", version = "1.0.0" }
serde_json = "1.0.149"
[build-dependencies]
serde_json = "1.0.149"
================================================
FILE: harper-brill/finished_chunker/vocab.json
================================================
{
"kicked": 8723,
"ADPL": 12418,
"Stirling": 4479,
"proper": 1178,
"blond-haired": 30464,
"unitary": 14934,
"hyper": 13552,
"Montenegro": 16486,
"trying": 2272,
"interrogations": 20679,
"adopt": 7874,
"500": 12101,
"km": 12102,
"DPA": 18474,
"defund": 14161,
"1829": 14690,
"DeCook": 21039,
"4641": 24959,
"bondad": 21405,
"03": 22242,
"FROM": 11799,
"Atkins": 3803,
"sanctuary": 19754,
"pillars": 13167,
"spots": 18825,
"wagon": 19793,
"milky": 27686,
"asparagus": 28449,
"singular": 15407,
"sampler": 29347,
"Maulana": 19098,
"Shaganon": 11441,
"202.456.2461": 24353,
"1614": 25367,
"customer's": 23511,
"purely": 1717,
"Parties": 14282,
"Clark": 14445,
"Homeland": 12110,
"Is": 6490,
"lousy": 6935,
"drag": 9979,
"mosque": 12267,
"Equity": 14518,
"Friendliness": 27506,
"glittering-eyed": 31934,
"greenhouse": 2176,
"legality": 31337,
"Jo-Ann": 31978,
"said": 1772,
"tranquillity": 14886,
"buckaroo": 32363,
"SF": 21175,
"tatters": 9853,
"Zagros": 16745,
"Marketing": 21395,
"traceable": 20672,
"General": 3456,
"insect": 9884,
"Change": 13457,
"tombstone": 5444,
"inspires": 12190,
"Hilton’s": 15109,
"Harkat": 19617,
"Feagan": 22533,
"instructors": 18208,
"hacked": 12791,
"sown": 25214,
"disrepute": 9127,
"Revenue": 7961,
"Stefania": 13223,
"hitting": 4882,
"ARCHILOCHUS": 25345,
"Toledo": 19923,
"pros": 10570,
"Hoston": 22163,
"APPROVE": 23047,
"pretext": 12856,
"Base": 11991,
"Full": 10826,
"Dillard": 8786,
"Rebecca": 10730,
"adversaries": 14327,
"J'": 4052,
"entry": 12114,
"evening's": 31381,
"Honest": 29051,
"ripping": 24116,
"Morality": 8279,
"1960s": 4548,
"828-296-8466": 24670,
"defunct": 19576,
"magazine": 12033,
"Siwu": 1841,
"snobbery": 32793,
"denote": 24153,
"CAROLINA": 24646,
"barely": 8434,
"9/11": 11046,
"(b)": 2457,
"decrease": 2174,
"Wu": 3413,
"BEING": 11845,
"incorrect": 2335,
"http://travel.state.gov/travel/cis_pa_tw/cis/cis_1052.html": 27123,
"–": 504,
"insurance": 7211,
"could": 1930,
"perv": 23908,
"Lynley": 4215,
"sashimi": 26939,
"Galen": 23174,
"Corp": 21364,
"Mississippi": 17474,
"chapters": 13755,
"Kitty": 21768,
"any1": 26210,
"acute": 2197,
"outbid": 24581,
"ridiculous": 17366,
"reliable": 1254,
"glitz": 16947,
"Unlce": 21998,
"Martinez@ENRON": 23442,
"swivel": 30301,
"independently": 10732,
"Gin": 32603,
"Fluff": 18399,
"Workpapers": 23313,
"remotely": 10451,
"tries": 8831,
"!!!": 21469,
"subjects": 2748,
"poisoning": 18692,
"shelters": 18762,
"Stl": 23008,
"thats": 23915,
"sentiment": 4662,
"Glacier": 15955,
"#descriptive": 8009,
"effaced": 31235,
"Manogue": 23224,
"0400": 25426,
"modulated": 2780,
"diminishes": 1252,
"announce": 7801,
"jigsaw": 32521,
"notable": 3781,
"Holding": 21125,
"associated": 2273,
"cemented": 25863,
"Chin": 2472,
"heckuvalot": 23648,
"geologists": 10603,
"desperate": 4672,
"cooked": 18389,
"Cell": 20985,
"Paradero": 29314,
"mexican": 28525,
"GEORGE": 24347,
"arrested": 12193,
"generative": 3691,
"joy": 14378,
"anticipated": 3039,
"bite": 18384,
"transform": 243,
"1738": 3131,
"candid": 5878,
"37": 7324,
"atty": 23808,
"diarheya": 27592,
"Motel's": 3968,
"donkey": 32012,
"stories": 4608,
"sizzling": 32113,
"Ben": 6131,
"nationally": 10884,
"litten": 9418,
"satanic": 20028,
"confessions": 32517,
"shah": 16770,
"Did": 6355,
"Ana": 5591,
"6400": 15561,
"glove": 20018,
"Leavenworth": 20836,
"apps": 2970,
"slavery": 12354,
"seek": 2539,
"alternated": 30505,
"Beast": 13635,
"upon": 140,
"eggnog": 8599,
"channelled": 14266,
"Armenian": 16748,
"stewardesses": 30554,
"wakes": 7023,
"neckless": 32049,
"educated": 4248,
"'S": 11492,
"accountability": 14167,
"ramifications": 7274,
"Hwang": 13076,
"Agassiz": 3462,
"acknowledged": 7633,
"Sinhala": 18975,
"trans-European": 31450,
"importing": 17158,
"attaching": 22283,
"overcooked": 29488,
"ploys": 30426,
"curating": 20187,
"Vercellotti": 19947,
"brack": 27198,
"overcharges": 23709,
"Re(a)d": 2919,
"regarding": 199,
"cawing": 17926,
"Suarez": 21076,
"entertained": 29384,
"Double": 4877,
"associate": 13389,
"!!!!!!!!!!?": 26330,
"exports": 31519,
"Mohandas": 15043,
"civic": 13945,
"ANDREAE": 10095,
"when's": 16207,
"American": 1266,
"republican": 29025,
"Stojic's": 22752,
"Attribution": 8540,
"12/26/2000": 23328,
"brook": 32740,
"China": 2718,
"premium": 20990,
"Mental": 13557,
"beverage": 10478,
"http://farm3.static.flickr.com/2406/2527255596_db23df940f.jpg": 26584,
"dente": 18383,
"Cunard": 32555,
"1954": 3453,
"members'": 12372,
"gathers": 201,
"Abundance": 25277,
"Seoul": 22069,
"leprechauns": 9889,
"lambs": 28940,
"utilization": 14545,
"Mann": 8420,
"focuses": 1595,
"Youngstown": 28599,
"silver-mounted": 31317,
"biogeochemistry": 2553,
"sufferings": 31957,
"Bhatia": 24167,
"outrageously": 21157,
"PHX": 17104,
"apostrophe": 30136,
"Sands": 4913,
"x33907": 22263,
"hierarchical": 20294,
"walls": 5054,
"dragons": 10319,
"bursting": 9098,
"weathered": 9166,
"valet": 28772,
"&": 30657,
"satire": 10568,
"Afghanistan’s": 19653,
"condition": 3191,
"devotion": 31022,
"DNA": 10621,
"whisky": 31613,
"Recognition": 12079,
"muscle": 9509,
"plunged": 5139,
"1542": 25467,
"hibernation": 27681,
"DATE": 24017,
"computer’s": 7788,
"cocktail": 10474,
"Messages": 21372,
"Mandelstam": 30772,
"forward": 5072,
"1533": 25462,
"30s": 17090,
"preconditions": 6611,
"clumsy": 13037,
"den": 31479,
"training": 349,
"Sne": 5928,
"Measure": 23026,
"http://en.wikipedia.org/wiki/Bullfighting": 28331,
"stranglehold": 31453,
"Kwa": 1842,
"Natsuko": 4605,
"swirl": 9736,
"Curry": 18391,
"soprano": 32624,
"spoiled": 27942,
"planeful": 32721,
"Ric": 21203,
"60622": 26915,
"Task": 25938,
"Rawalpindi": 20590,
"colonies": 3566,
"oversees": 24288,
"mileage": 29193,
"reservoirs": 17066,
"washing-up": 32214,
"glowed": 9973,
"plastic": 7769,
"Beringia": 15273,
"Shrodinger": 24904,
"willow": 25056,
"someplace": 28428,
"6": 469,
"hanging": 7807,
"pasta": 15771,
"towed": 28777,
"$$": 28013,
"Middle": 7817,
"gangland": 19913,
"Scheuer": 20615,
"senatorial": 4999,
"duty": 12277,
"kidnapping": 18496,
"historians": 27098,
"Pemex": 22293,
"Esna": 5929,
"cigarette": 7348,
"Georgia": 14363,
"comprehension": 14500,
"bronzy": 16054,
"cave": 17002,
"06:30": 16609,
"mini-serial": 4165,
"Doing": 13844,
"tube": 6836,
"consciously": 14843,
"semi-empirical": 2678,
"Popup": 23595,
"smashed": 13679,
"selective": 1639,
"ashtrays": 30268,
"FRIENDLY": 29680,
"hose": 3011,
"monies": 24510,
"Dreamworks": 13589,
"strangle": 8618,
"waves": 2428,
"Łódzkie": 16860,
"adjusting": 17930,
"Ravenna": 31003,
"kitchens": 29981,
"akin": 22493,
"hour": 10888,
"persuasion": 20879,
"401.3": 25982,
"homosexuals": 25581,
"meetings": 11419,
"BUSH": 24349,
"bunioned": 32358,
"hoping": 14776,
"fools": 31884,
"thanking": 14472,
"Robinson": 6169,
"Henga": 16313,
"reporter": 11103,
"freedom": 6521,
"tranquilize": 7066,
"BW": 24960,
"billiard": 25063,
"renamed": 16917,
"eyed": 7992,
"deem": 15530,
"PAINT": 25369,
"island": 5018,
"reigon": 28217,
"equilibrium": 31489,
"94.40": 26013,
"donating": 18590,
"considers": 2502,
"timetable": 22601,
"learns": 25466,
"emblem": 9310,
"heights": 4703,
"Thanksgiving": 21965,
"encased": 25894,
"Fucking": 9665,
"symmetries": 32646,
"celebrated": 3963,
"Rapid": 11518,
"Collingswood": 28810,
"unfriendly": 20536,
"amalgamation": 10739,
"later": 1189,
"Kuwait": 16765,
"humming": 20330,
"Alhaznawi": 20781,
"McNealy": 24212,
"had": 1277,
"rebuild": 11536,
"2021": 12985,
"vols": 4451,
"felt": 4656,
"conveys": 8205,
"1.3": 14702,
"carrots": 27443,
"Ayatollah": 18923,
"Arrow": 17464,
"wavered": 31614,
"sulphur": 31375,
"PPM": 27885,
"ragamuffin": 4673,
"dialed": 30504,
"symbolized": 6869,
"Distorted": 8636,
"Activity": 21956,
"nonviolent": 15049,
"WASTE": 24456,
"stretched": 8608,
"admiral": 4268,
"Caucasian": 27250,
"snake's": 27679,
"Stay": 9567,
"whites": 31783,
"Paper": 10514,
"IRS": 23573,
"experiment": 10308,
"GM": 21540,
"For": 437,
"Contractual": 23023,
"apathetic": 30029,
"Imagine": 4107,
"Gregg": 21931,
"reserved": 7571,
"masking": 601,
"playground": 9595,
"dismantled": 31297,
"Eisenhower": 14589,
"Kalkat": 19034,
"Berkman": 14556,
"widest": 25932,
"disgustingly": 27452,
"doesn’t": 9503,
"Piaget’s": 15029,
"NW": 22804,
"conversational": 1812,
"turn": 1829,
"you'll": 6506,
"international": 10999,
"modestly": 30231,
"ceases": 25850,
"Intelligence": 13969,
"mermaids": 8999,
"stronger": 10877,
"high-carrying": 32704,
"recognition": 732,
"draining": 32406,
"f-": 6038,
"remark": 9668,
"obligated": 22711,
"Vassar": 29461,
"Specified": 22045,
"Jubilee": 10347,
"Contest": 5731,
"enjambed": 989,
"unilateral": 14226,
"maddened": 9410,
"Are": 6509,
"BEFORE": 28785,
"poses": 19747,
"coming": 6903,
"Who'll": 31785,
"volatilities": 22689,
"median": 15638,
"doorknob": 30244,
"Elie": 30650,
"LSD": 12430,
"preventive": 20399,
"flirting": 17962,
"Champagne": 27010,
"Ben-Gurion": 30721,
"dead": 5056,
"fringed": 31091,
"Eats": 6682,
"curdle": 17871,
"I/C": 23642,
"Morse": 31397,
"Importantly": 226,
"threads": 3060,
"municipalities": 7631,
"stacked": 28888,
"kidding": 7116,
"staying": 7064,
"turnover": 28972,
"revolutionaries": 14727,
"crosses": 17288,
"trades": 15373,
"losses": 11605,
"MAGICAL": 32346,
"macro": 22595,
"vaccines": 1394,
"2710": 20924,
"commitments": 11217,
"enviroment": 26497,
"Yogi": 24186,
"arises": 11622,
"document's": 30104,
"Mathias": 10203,
"owl": 30841,
"HATE": 11901,
"crops": 13445,
"stellar": 29330,
"catalytic": 21837,
"jungles": 31014,
"fry": 18390,
"miao": 14890,
"Kaoshikii": 24032,
"undertakes": 3025,
"Stubley": 23164,
"nuisance": 31236,
"jack": 26325,
"twins": 32149,
"mid-town": 17472,
"perhaps": 1927,
"preaching": 31020,
"picnics": 11787,
"II": 3155,
"metaphysics": 3219,
"marae": 16350,
"movie's": 13624,
"cautiously": 5071,
"N.Y.": 11801,
"Marymegan": 10587,
"Barn": 27197,
"manager's": 31315,
"health": 1263,
"retardation": 20042,
"controversially": 1391,
"Boot": 1550,
"713/853-5984": 22976,
"styler": 15926,
"met": 3801,
"casual": 26213,
"19/11/2004": 24556,
"Period": 21642,
"Terrell's": 19400,
"lessen": 7146,
"prominence": 5404,
"Lionel": 11409,
"1984": 3095,
"hoorah": 21853,
"sprayed": 31709,
"Babe's": 16560,
"Happiness": 25295,
"asserted": 5952,
"governs": 23564,
"Unfortunately": 2165,
"fried": 28526,
"1694": 14945,
"Marshall": 23770,
"parliament": 18551,
"apogee": 27105,
"shrunken": 32281,
"tug-boat": 32376,
"Weil": 20144,
"teacher's": 27660,
"Looks": 6478,
"extremely": 1753,
"Merson": 4903,
"jumps": 13842,
"artworld": 14900,
"mobiles": 13436,
"Mackey": 2417,
"diseases": 13495,
"instruction": 14836,
"Michelle": 5453,
"Program": 5713,
"activists": 12477,
"Makos": 13365,
"Baja": 23293,
"counterweight": 25827,
"Watson": 28283,
"arrangements": 8081,
"cigar": 31623,
"pools": 26548,
"interquartile": 15659,
"instinct": 14405,
"plummet": 24590,
"Concerned": 28899,
"crux": 7369,
"pagefilename.bak.htm": 30065,
"Grusendorf": 21794,
"Zafra": 25461,
"Govind": 28557,
"quart": 31304,
"allocation": 11619,
"boulevard": 25541,
"heat": 6269,
"Rams": 29445,
"deeply": 5140,
"fyi": 21213,
"pleased": 13897,
"Terminals": 17107,
"nematocysts": 10650,
"181": 24144,
"marketing": 8209,
"plumbers": 27310,
"pizzas": 29640,
"Kingdom": 21,
"AK": 18575,
"http://bit.ly/kPlaylists": 26540,
"Catholic": 4290,
"commander": 12867,
"HONKA": 28650,
"nestling": 32946,
"Lynch": 23339,
"uncomprehendingly": 9525,
"Bay": 4935,
"CBD": 26963,
"Brad": 23086,
"rulers": 18976,
"weather": 6151,
"knick": 8064,
"refute": 22464,
"mayur...@yahoo.com": 24222,
"your": 4580,
"department's": 27892,
"depopulated": 31575,
"internalised": 32837,
"herewith": 23088,
"symbolic": 20618,
"Renata": 9505,
"horizontally": 2769,
"examining": 1868,
"quilling": 29535,
"Plaskitt": 14707,
"wheels": 26421,
"AM": 11127,
"excellant": 28115,
"Breyer": 26825,
"intensely": 9997,
"OLE": 23115,
"#technology": 8257,
"matchup": 12091,
"Schenectady": 11800,
"Daphnia": 27847,
"daily": 1645,
"Fawn": 12640,
"alternating": 25271,
"prescribe": 27613,
"dean": 18518,
"9221": 22243,
"pertains": 19420,
"Blount": 19800,
"steadily": 9989,
"disrupt": 19665,
"Crescent": 22237,
"spiders": 31739,
"autumn": 26007,
"unify": 24774,
"Jerusalem": 20449,
"EEI": 22180,
"Gianutto": 25485,
"Finns": 31952,
"predictors": 8507,
"horse's": 6389,
"amazed": 9936,
"<": 1688,
"tile": 9717,
"stowed": 25520,
"Eugene": 5547,
"fenders": 30647,
"Neuralink": 8340,
"Keeper": 18308,
"Romance": 25281,
"Parthenon": 32816,
"Genius": 15252,
"flickering": 10054,
"20006": 22827,
"YE": 21026,
"figure": 2143,
"Around": 3180,
"Concerning": 6532,
"Launch": 24792,
"Łódź's": 16874,
"definition": 1080,
"afresh": 14091,
"Rickenbacker": 11711,
"registered": 14436,
"considerate": 17289,
"saddened": 28656,
"R&D": 16420,
"little": 861,
"Armaments": 25757,
"OUT": 26477,
"80435": 23327,
"cascading": 8932,
"S’pose": 9908,
"tighten": 9326,
"750,000": 16955,
"accomdating": 28128,
"Little": 5733,
"talked": 3882,
"fueled": 16976,
"bows": 30897,
"alienating": 18869,
"involvement": 1584,
"magickal": 20226,
"infiltrators": 18812,
"7.3": 15047,
"Powder": 21881,
"christmas": 26391,
"shackled": 26075,
"neighbour": 31892,
"licked": 32641,
"Anon": 12719,
"Steel": 23002,
"drawings": 28477,
"713-853-1696": 21702,
"characterized": 12703,
"Jahan": 16732,
"confirms": 22540,
"1551": 25476,
"Havelock": 19540,
"Arts": 10383,
"India": 7311,
"tel": 16557,
"cheques": 26040,
"62": 17015,
"Bartlesville": 17405,
"Cap-": 6733,
"lace": 8351,
"Taffy": 22030,
"inoperable": 29925,
"upraised": 24098,
"restructure": 30071,
"skiing": 29138,
"Chris": 5716,
"TIBCO": 21362,
"swarthy": 32732,
"differential": 23292,
"committee": 14170,
"Mosul": 4525,
"By": 634,
"harmonisation": 31458,
"tie": 6505,
"gagged": 25572,
"Stelle": 13201,
"grounded": 3072,
"depersonalizing": 13681,
"spike": 23711,
"...............": 27385,
"Matisse": 21176,
"exporters": 31530,
"Republican": 3978,
"hazy": 11487,
"Vanguards": 20566,
"exits": 32725,
"Ouiji": 7004,
"sequences": 1141,
"child's": 27469,
"Serbia": 16495,
"pear": 31794,
"Barber": 28709,
"accommodating": 32861,
"profit": 1387,
"spraying": 28272,
"thinker": 7869,
"!!!!": 24943,
"antisocialism": 25699,
"AAAAAGGGHHHHHH": 22117,
"asleep": 6817,
"advise": 16460,
"04:31": 22040,
"SERVICE": 28281,
"Proxy": 29923,
"occasioned": 3965,
"190": 13314,
"hastened": 14420,
"Alcala": 25483,
"nowadays": 2160,
"downside": 23426,
"obscure": 3887,
"trees": 9168,
"Kat": 15865,
"!?": 26297,
"bs": 29538,
"merry": 31132,
"Devlin": 2435,
"Morne": 16678,
"Dudley's": 32106,
"policy": 10710,
"butter-hearted": 32361,
"4.": 1903,
"mix": 18428,
"Unitary": 24727,
"Occupation": 5347,
"FORMAL": 22873,
"pairing": 383,
"Clouds": 5499,
"Northumberland": 17578,
"Dependant": 24773,
"MYSTERYS": 28764,
"Newton’s": 15542,
"balconies": 13936,
"front": 5835,
"interactions": 14808,
"moonshine": 30984,
"man": 4670,
"mop": 27855,
"Peninsula": 2063,
"Operation": 12742,
"leaf": 8898,
"Grenadines": 16494,
"EDIT": 26302,
"respectfully": 7498,
"duh": 6337,
"doubts": 8387,
"reached": 14215,
"Malaysian": 12167,
"reduces": 764,
"shrewdness": 25526,
"populous": 17030,
"scary": 6757,
"Ichiyō": 4597,
"eHow": 10799,
"petsmart": 26448,
"Albatross": 17978,
"battlefield": 25862,
"barbecue": 27307,
"intruder": 27694,
"commit": 11219,
"protégé": 4982,
"therapist": 15725,
"contend": 17615,
"keyword": 14862,
"Kiss": 8819,
"seeing": 4621,
"cheung": 12405,
"Nehru": 19000,
"adult's": 27875,
"unilevel": 23996,
"kiln": 26265,
"principle": 3123,
"COVID": 14172,
"geologically": 30631,
"unquestionably": 20065,
"eating": 8199,
"cripple": 25799,
"pays": 20459,
"patents": 5203,
"impasse": 19062,
"Building": 11346,
"Correspondents": 19518,
"unexpected": 10596,
"dilly": 17935,
"harms": 19362,
"ignore": 3875,
"ANTHONY": 25404,
"bland": 27617,
"acted": 13762,
"corporations": 7974,
"climate": 802,
"emotional": 3082,
"Uncle": 21981,
"priority": 3848,
"finished": 10563,
"professor": 3209,
"Port": 16332,
"detract": 22091,
"Diagnostic": 13554,
"locking": 8083,
"dwellings": 15417,
"FITNESS": 28520,
"Tweed": 23759,
"banished": 31633,
"fisheries": 25161,
"jolly": 8626,
"Crawfish": 22528,
"Visual": 13265,
"programmatically": 30041,
"worthwhile": 4726,
"Items": 30087,
"productively": 18270,
"yoyos": 30481,
"Cups": 11006,
"Operations": 21100,
"multiple": 7634,
"Congolese": 31869,
"tackling": 13007,
"absorb": 14408,
"Hutt": 16333,
"gall": 24083,
"hitched": 32090,
":)": 10654,
"repulsive": 24217,
".......": 18726,
"true": 3885,
"inspire": 8454,
"wails": 8778,
"Admissions": 22672,
"protecting": 7440,
"towns": 13020,
"Depth": 17320,
"Nierman": 6034,
"splashy": 6053,
"Rond": 3277,
"partition": 19341,
"Lai": 3485,
"attributable": 21223,
"Damage": 24443,
"distributed": 488,
"TOO": 27350,
"Sstaff": 28169,
"snaking": 31822,
"guqin": 14881,
"insider": 20900,
"Tire": 28691,
"US's": 20340,
"official": 3531,
"noon": 14411,
"steered": 18201,
"Jeremy": 12491,
"nonetheless": 15185,
"retest": 30186,
"Maarten": 27497,
"stretching": 9115,
"363-0555": 16567,
"suitcases": 29967,
"overseas": 11000,
"Kumaratunga": 19019,
"cockpits": 9273,
"layout": 16812,
"production": 293,
"dilemma": 15087,
"homemade": 26262,
"01:14": 22764,
"884": 25353,
"might": 435,
"tarpaulin": 17309,
"Buffet": 28720,
"Beautiful": 19471,
"Tabennese": 5905,
"fighters": 9284,
"note": 1437,
"bowls": 8975,
"Barack": 12194,
"stocking": 18166,
"guardsmen": 19216,
"laurie.ellis@enron.com": 21418,
"pigs": 15446,
"everyone's": 13617,
"knowing": 4637,
"hedging": 23427,
"toddler": 28993,
"romatic": 29005,
"drenched": 29396,
"bɛʁˈnʊli": 3104,
"battling": 16863,
"neo-colonialism": 31958,
"leotard": 17683,
"Parmesan's": 25134,
"Wenders": 5517,
"Entree": 28603,
"creditors": 22626,
"animal": 10631,
"churchyards": 9468,
"frightened": 10140,
"formerly": 5308,
"Control": 20825,
"Pixel": 26233,
"cultures’": 15441,
"Chamber": 14350,
"leaped": 31305,
"Dishwasher": 18416,
"blisters": 32825,
"Cloud9": 12578,
"finishing": 10922,
"because": 856,
"barbeque": 17153,
"MASS": 10105,
"guffaw": 30463,
"tanned": 30882,
"Tarahumara": 5568,
"hindsight": 16155,
"lit": 9568,
"brand": 2933,
"Turismo": 17006,
"UW": 28855,
"achieve": 2726,
"master": 6567,
"ft": 17037,
"NEEEEEEEEEVERRRR": 29089,
"tempting": 6952,
"Tips": 17888,
"dinosaur": 2890,
"part-session": 31388,
"topological": 2348,
"other's": 30903,
"Revisited": 4123,
"Interconnect": 23566,
"reconvene": 15739,
"50th": 15639,
"Rosemary's": 25612,
"Louisiana's": 24439,
"Chiang": 12469,
"checked": 15813,
"E@tG": 20232,
"Bernardini": 10293,
"groaned": 32222,
"strenuous": 19721,
"bidding": 22733,
"katan": 30535,
"hammocks": 26868,
"dismiss": 15248,
"http://www.infoukes.com/history/chornobyl/gregorovich/index.html": 18703,
"bends": 15621,
"holy": 13156,
"gas": 6263,
"Escaping": 26473,
"646-8420": 21417,
"friday": 27958,
"trundling": 32741,
"destruction": 18244,
"breakdown": 7207,
"valley": 5440,
"Aesthetic": 1,
"news": 6746,
"---": 23345,
"Stretching": 17665,
"minute": 4692,
"Leah": 7091,
"liked": 6093,
"staples": 16146,
"frosting": 17878,
"confirmations": 9355,
"ethnically": 25435,
"obviously": 6646,
"ConnectionFile": 30061,
"Fla.": 11943,
"08/07/2001": 23120,
"forwards": 31457,
"XML-based": 30097,
"premier": 7335,
"weren't": 6119,
"fell": 4636,
"twist": 15938,
"02:10": 21648,
"Heisenberg": 24903,
"furnished": 27914,
"PROVIDED": 27475,
"Rated": 16374,
"1914": 5550,
"Butterfly": 16630,
"2018": 2524,
"escalation": 25753,
"barcoding": 29306,
"complications": 18684,
"Chalmers": 9225,
"stranger": 9625,
"electron": 15580,
"syrupy": 18449,
"asian": 28207,
"hunts": 15506,
"202.456.1111": 24351,
"Lotf": 16802,
"sliver": 18899,
"persistence": 1712,
"puns": 3471,
"humanities": 179,
"criterion": 13222,
"Minchah": 30588,
"Non": 17324,
"pickup": 29717,
"raw-potato": 31715,
"refuse": 13944,
"islets": 17207,
"KNOW": 21519,
"moss": 10002,
"Emails": 20658,
"Sussex": 27131,
"wiring": 9632,
"a-": 6278,
"Aelius": 5023,
"64.75": 1694,
"USDA": 20711,
"windows": 5064,
"reneged": 25922,
"cotton": 13480,
"audiotape": 20668,
"CT": 24023,
"dotted": 17586,
"layers": 24045,
"utilitarianism": 24876,
"people’s": 1248,
"fill": 6254,
"informed": 2504,
"Capitol": 15272,
"uterine": 27059,
"yr": 27907,
"hardware": 628,
"leap": 8920,
"NOV": 28604,
"OMFG": 28731,
"dally": 17936,
"neglected": 29879,
"bluntly": 25890,
"Normalcy": 5987,
"cards": 8812,
"youre": 26719,
"bobbed": 32431,
"HOUSEMOTHER": 11904,
"distrusted": 14695,
"packages": 17155,
"btw": 26737,
"strengthen": 13859,
"equipment": 6342,
"Regenesis": 26509,
"outsourcing": 20060,
"relatively": 2811,
"painted": 8589,
"regular": 1531,
"spoilers": 3054,
"country": 922,
"sore": 6383,
"coughing": 15806,
"boutiques": 16615,
"pursuant": 20801,
"JOYSTICK": 26787,
"physicist": 3110,
"dreaming": 7993,
"sifted": 17855,
"socio-political": 20135,
"Muscovy": 4398,
"budge": 28223,
"insets": 32889,
"fat": 9501,
"experimented": 3284,
"McConnell@ECT": 21186,
"Unfair": 27642,
"*~*~*~*~*~*~*~*~*~*": 23078,
"306": 25767,
"becouse": 26755,
"Robogee": 12131,
"haunt": 23969,
"directives": 31416,
"Conrad's": 10911,
"Integrity": 32578,
"Cities": 16655,
"dangerously": 8624,
"latitude": 2329,
"mot": 7754,
"restoring": 14343,
"overflow": 26671,
"preconception": 13703,
"chambers": 24863,
"BCE": 15316,
"bashing": 21343,
"Barbara": 6719,
"vacuous": 20298,
"napkin": 28221,
"different": 155,
"resource": 7879,
"tracking": 144,
"dangled": 8554,
"biologists": 10601,
"attributes": 30127,
"level": 588,
"6500": 31521,
"unless": 6909,
"Arabia": 13155,
"buttering": 32216,
"82": 4812,
"laughed": 9014,
"lawsuits": 8573,
"governorates": 19317,
"Shawnta": 15912,
"Dupont": 28122,
"strolling": 31282,
"Cab": 16225,
"Hour": 5470,
"2:25": 15860,
"Aksa": 20493,
"dumbstruck": 32165,
"rat": 26481,
"Everything's": 15991,
"un-ruly": 28507,
"structure": 753,
"excitement": 2483,
"boasting": 24159,
"telegram": 11036,
"Universidade": 1504,
"Pierre": 3265,
"Buddy": 6082,
"borders": 8440,
"revolt": 14726,
"relativism": 15509,
":O": 26395,
"uneasy": 25556,
"calming": 29789,
"cutoff": 2700,
"motorway": 16876,
"retaliation": 18637,
"bourbon": 17987,
"Kumar": 10071,
"mother": 4232,
"ANYTHING": 27337,
"backing": 15928,
"!!!!!!!!!!": 28361,
"titles": 10962,
"1825": 3507,
"re-read": 24857,
"373": 5120,
"trails": 8915,
"PASSWORD": 23038,
"suffocate": 27899,
"noone": 23905,
"blackened": 9181,
"vermiculite": 17729,
"GCP": 22034,
"illuminating": 8375,
"Hats": 28655,
"Limerick's": 26152,
"Gulf": 14238,
"TK": 23600,
"pirate": 31501,
"cutting": 6886,
"obtaining": 11614,
"elegance": 17690,
"CANADA": 26743,
"cheated": 29181,
"buns": 30309,
"useful": 513,
"messages": 5667,
"tanning": 5220,
"tulips": 15885,
"fires": 24843,
"co-workers": 21269,
"JOHN": 10096,
"removal": 12821,
"chromosome": 15281,
"examine": 15572,
"Kyle.Jones@ra": 22024,
"Decision": 14389,
"nosedive": 8491,
"comeback": 16392,
"occurs": 1117,
"articles": 1392,
"padded": 13170,
"lengthy": 13052,
"purporting": 20848,
"resond": 21292,
"advocate": 1270,
"fringes": 30518,
"beautifully": 10154,
"Bearing": 32918,
"Leaky": 16100,
"lilac-coloured": 32899,
"COM": 31461,
"beadwork": 31562,
"pins": 7044,
"overdose": 25611,
"concur": 19316,
"Strasburgh": 4454,
"Astros": 4899,
"positioned": 23983,
"Omar": 19673,
"Game": 2926,
"Sommer's": 22779,
"http://www.beardeddragon.org/articles/caresheet/?page=1": 27762,
"12:30": 18255,
"afraid": 6319,
"Yadavaran": 25840,
"consumption": 2084,
"DON'T": 28398,
"===>": 26514,
"rvs": 29720,
"freeways": 17455,
"tomb": 4390,
"grabs": 8789,
"Fragile": 18147,
"316": 14909,
"Torrey": 22560,
"01/13/2001": 22771,
"Mideast": 25875,
"divisions": 14387,
"Derrick": 29861,
"Been": 6495,
"11/29/00": 22037,
"448-9499": 22377,
"licensed": 7140,
"damn": 6078,
"muddle": 31746,
"Palette": 16069,
"FIRE": 22947,
"contaminated": 18674,
"shout": 11071,
"endevour": 28927,
"propose": 1810,
"aggravated": 19447,
"Member": 11594,
"295870": 23558,
"unbelievable": 6872,
"maintaining": 1588,
"quiz": 18817,
"http://www.adventurehobbycraft.com/products/hobby_craft_supplies.html#metal": 26846,
"Jeanne": 5339,
"Defend": 27707,
"Bosco": 7316,
"OVER": 28408,
"FREEDOM": 25245,
"Sassanid": 16813,
"pint": 29354,
"disorders": 13562,
"10:38": 15851,
"effects": 154,
"fate": 6568,
"Marsha": 2935,
"especially": 1589,
"Abbey": 4156,
"1584": 25361,
"inferiors": 17341,
"shewing": 9476,
"Bud": 29735,
"ponder": 10185,
"gleaned": 24770,
"p.m.": 15565,
"test": 1666,
"1831": 3840,
"imperil": 25843,
"Crystal": 5822,
"resort": 16073,
"43.6": 26082,
"Carrasco": 13099,
"diagnose": 29058,
"profits": 11654,
"asterisk": 30180,
"WWW": 22456,
"ConnectionString": 30058,
"eldest": 3535,
"steamer": 31078,
"Heather": 25650,
"blackmail": 20486,
"Hikmetar": 19676,
"HBS": 23154,
"butterflies": 10254,
"piloting": 2513,
"probably": 1896,
"Seized": 5150,
"struggling": 5874,
"contents": 10844,
"pharmaceutical": 1323,
"experimentation": 5032,
"available": 547,
"calmness": 28680,
"Chicago": 3778,
"bouncy": 28990,
"Owls": 4843,
"backup": 9615,
"brick-dust": 31703,
"wander": 7748,
"Abd": 4542,
"viewership": 2948,
"Telugu": 28505,
"filigree": 16738,
"fetishism": 18805,
"Joker": 12555,
"Equipment": 28724,
"Among": 2671,
"Darren": 22100,
"shark": 29207,
"genius": 28835,
"movement": 658,
"ascetics": 4997,
"1,095,000": 15681,
"alley": 32337,
"bout": 19150,
"Infected": 10224,
"14721": 22790,
"view-only": 30177,
"customers": 10579,
"***********************************": 23881,
"wouldnt": 26369,
"VM": 11391,
"badgers": 17229,
"Khosla": 24211,
"Quarter": 4418,
"Thors": 31469,
"blasting": 31182,
"Centuries": 948,
"convince": 7777,
"http://news.yahoo.com/nestl-purina-releases-commercial-aimed-dogs-183443091.html": 27204,
"tatty": 32940,
"cautioned": 25078,
"marshes": 9427,
"safer": 10715,
"Yoshiwara": 4699,
"Malacca": 19556,
"Counselor": 7565,
"quo": 10411,
"ld2d-#69397-1.DOC": 22434,
"unturned": 28074,
"murderer": 20400,
"counsel": 7353,
"Prompted": 12715,
"Protection": 13489,
"cab": 6061,
"unable": 2867,
"Putin": 14668,
"declares": 12720,
"deducted": 7202,
"etc.": 7797,
"freezer": 8016,
"Israel": 11170,
"DURING": 11860,
"converter": 21838,
"Bayley": 31807,
"Cycle": 23457,
"bassiana": 10222,
"Mustapha": 13136,
"daunting": 16154,
"5,600": 3066,
"sundry": 30346,
"Nadereh": 20076,
"collector": 11338,
"Simone": 20143,
"S@P": 20972,
"Shankman": 22534,
"Kenny": 26064,
"Device": 21073,
"Pyrenees": 27529,
"Frost": 17887,
"Tempe": 17044,
"attendees": 12559,
"Emergency": 8864,
"Mitten": 26275,
"345-8702": 21146,
"Skittle": 18430,
"specifics": 13668,
"Braised": 18392,
"Street": 6304,
"CPUC": 22390,
"prongs": 27370,
"Barb": 6725,
"radiant": 30924,
"warranty": 28343,
"cowboy": 28862,
"therefore": 933,
"apprehension": 19076,
"Inter": 19566,
"Political": 10370,
"savagely": 32107,
"coordinator": 20946,
"wriggle": 31889,
"Tiziano": 12344,
"Healing": 23952,
"learners": 14548,
"manners": 25658,
"multi-millionnaires": 19757,
"daniel.smith2@durham.ac.uk": 28,
"Swiss": 3108,
"abundance": 15372,
"A.M.": 11484,
"Give": 6804,
"fades": 25275,
"bombs": 18506,
"Boardroom": 22971,
"Religious": 14835,
"Tapping": 8118,
"stomped": 9746,
"mysteriously": 19966,
"decides": 25818,
"frontal": 6855,
"Okmulgee": 17443,
"deter": 18635,
"We": 160,
"claire.bailey-ross@port.ac.uk": 15,
"process's": 27384,
"motel": 29466,
"Prabhakaran": 19022,
"estimates": 13519,
"panicked": 9227,
"Circus": 25591,
"subconsciously": 7798,
"Nonpartisan": 12488,
"house-elf": 32128,
"developmental": 9581,
"hurtling": 24786,
"Justice": 7219,
"twenty-year": 32629,
"noodling": 13749,
"shiny": 31912,
"recurrent": 4646,
"lifeguard": 21248,
"stools": 30302,
"Lolland": 17244,
"Digimon's": 12633,
"Civic": 12393,
"goddamn": 9766,
"seem": 1926,
"richest": 17184,
"Confidentiality": 21003,
"UPI": 24999,
"scatters": 32388,
"EOL": 21572,
"guides": 27760,
"measuring": 3296,
"iconic": 8407,
"pagodas": 9416,
"commend": 14110,
"nachos": 28349,
"80th": 3668,
"LBJ": 27728,
"Speaking": 18604,
"ingenuity": 14630,
"Agency": 2577,
"chill": 7465,
"coal-hole": 32479,
"wardrobe": 30242,
"reduction": 2898,
"Dalmatia": 4976,
"d'etat": 19311,
"sometime": 11744,
"opposed": 10453,
"representative": 122,
"Mukhabarat": 20790,
"6565": 23625,
"Trees": 29022,
"Peoples": 21937,
"20.00": 1695,
"Tussauds": 5198,
"planeloads": 19881,
"Praying": 5936,
"butterfly": 10025,
"bordered": 16523,
"They’re": 9541,
"vaguer": 32439,
"vinyl": 32552,
"employs": 26116,
"dysphoria": 1305,
"excavations": 17541,
"Woking": 26123,
"Bargain": 27347,
"Cheese": 29353,
"braining": 27674,
"Curtis": 31959,
"strutting": 32178,
"conscientious": 8097,
"oceans": 9387,
"18th": 13104,
"Lansing": 11995,
"installation": 13413,
"shish": 15557,
"submersion": 17214,
"Muhammad": 4520,
"Epis.": 11752,
"Global's": 21613,
"phosphorous": 32600,
"OF": 11513,
"mothers": 20040,
"Because": 496,
"dinginess": 30495,
"zero": 7125,
"Marrying": 27374,
"THEY": 27046,
"London": 4486,
"writings": 4981,
"TIRED": 11876,
"01:00:51": 22029,
"referral": 22928,
"peru": 25465,
"inquire": 26445,
"RhodeRunner": 27161,
"Connaught": 27419,
"cope": 29904,
"statistically": 1686,
"enforcing": 13877,
"1423": 16889,
"1605": 25386,
"demanded": 6627,
"brick": 14323,
"Mcdonald's": 26331,
"07": 28605,
"376-9004": 23861,
"Significant": 1934,
"seis": 6315,
"lava": 30840,
"post": 882,
"bang": 19907,
"Suck": 28465,
"pre": 23802,
"Expo": 12525,
"trend": 1096,
"fox": 32633,
"commitment": 13874,
"Tobias": 14475,
"Anonymous": 12687,
"shade": 13567,
"ambush": 30532,
"stranger's": 30227,
"participant": 1660,
"ministered": 5567,
"reffered": 29010,
"Dursley": 32023,
"Brigade": 20734,
"Enfranchising": 8109,
"masculinity": 10871,
"yourselves": 21614,
"goo": 9873,
"Domain": 14708,
"nesting": 25138,
"Reymont": 16913,
"daytime": 10890,
"x36709": 23617,
"Builds": 24007,
"shaggy": 32809,
"expansion": 1181,
"Review": 14281,
"Value": 25995,
"Thi$": 26745,
"It's": 6137,
"Highlighting": 21955,
"dogma": 6607,
"wildlife": 17000,
"Douglas": 4253,
"camper": 21834,
"bill": 7062,
"issues": 60,
"gratitude": 14155,
"hens": 27130,
"speadsheet": 21816,
"Bu": 19328,
"http://www.time.com/time/daily/chernobyl/860901.accident.html": 18707,
"stewardess": 30564,
"smoothly": 25287,
"mystical": 25313,
"EMERCOM": 18668,
"diety": 13412,
"briefing": 20682,
"particularized": 31145,
"Rental": 7303,
"Garcia@ENRON": 21626,
"WITHOUT": 29877,
"Tyler": 8697,
"#1": 17126,
"scrub": 27062,
"memorable": 5321,
"melanie.gray@weil.com": 23821,
"shorter": 2812,
"congestion": 15820,
"cheerful": 30592,
"cruel": 17643,
"Wiltshire": 31638,
"ranks": 4280,
"aggregators": 22428,
"breadth": 10808,
"Photos": 12265,
"N": 2053,
"Bremen": 16181,
"deductions": 7201,
"must": 794,
"whitehouse.gov": 20271,
"sympathy": 23910,
"mutate": 13822,
"quesadillas": 29165,
"64,500": 15684,
"medicating": 10196,
"True": 20306,
"chubby": 8773,
"Location": 15629,
"hoarse": 32204,
"Crim": 28100,
"60's": 20363,
"Novotel": 29792,
"domestically": 13952,
"keeping": 10252,
"flavoring": 17890,
"Cabalah": 25638,
"unawares": 3045,
"mid-thirties": 30408,
"paired": 1681,
"occupied": 18958,
"3,500": 21396,
"balding": 27792,
"radio": 2714,
"Leainne": 26450,
"finding": 1931,
"salespeople": 28120,
"Elevator": 5405,
"profession": 1288,
"Cranmore": 29211,
"Chapter": 7573,
"Joyce": 8867,
"Fusion": 29362,
"favor": 7268,
"Dry": 21882,
"Shorty": 22101,
"Laughter": 31994,
"friends'": 9283,
"Find": 17685,
"ENERGY": 23437,
"COSTS": 29230,
"accommodation": 7304,
"combed": 9011,
"Effective": 21550,
"Gabonese": 12094,
"lonely": 4667,
"tapping": 8924,
"appetite": 16164,
"enquiry": 22593,
"Engineering": 2060,
"GOD": 25605,
"inked": 25838,
"Mae": 6346,
"heads": 5821,
"Groningen": 3133,
"Scipio": 23974,
"versus": 7129,
"Proposition": 21030,
"gaming": 13559,
"ounce": 29300,
"backward": 14701,
"offsite": 21654,
"Awesome": 15901,
"h=guys": 26459,
"recovery": 10653,
"II's": 25397,
"remembering": 14997,
"Sharq": 18556,
"Westchester": 16541,
"sanitation": 32503,
"grappling": 15714,
"Marilyn": 13384,
"lagoon": 16179,
"governmental": 11634,
"Mission": 13924,
"126": 22235,
"Roger": 29140,
"Discuss": 15268,
"admit": 1783,
"Berg": 13069,
"youtube": 26475,
"Augustin": 3547,
"starvation": 20525,
"heavenly": 31048,
"specially": 31745,
"installed": 13173,
"Can't": 22789,
"woo-": 6219,
"company": 8339,
"Olson": 21807,
"remnants": 9208,
"royally": 20521,
"Effects": 18653,
"firms": 19901,
"PIP": 31778,
"innovators": 8100,
"That’s": 9888,
"treatments": 13580,
"Stillman's": 30271,
"driveby": 9807,
"4,489,109": 17084,
"diplomacy": 14252,
"Im": 24231,
"83": 25962,
"pantry": 17904,
"depots": 17513,
"nation's": 12665,
"CPIM": 23300,
"Tracy": 22315,
"implementation": 673,
"Feng": 1546,
"soups": 8026,
"Psychiatry": 8530,
"neglect": 16938,
"imprisonment": 20808,
"sentimental": 31030,
"privatly": 29799,
"picture": 6503,
"places": 2323,
"parishioners": 29049,
"1225": 2476,
"bowlders": 31172,
"their": 347,
"team": 4824,
"photojournalism": 11113,
"engaged": 1385,
"Panda": 29845,
"Definitely": 16045,
"Easter": 8700,
"pears": 32430,
"broadcast": 7555,
"bartenders": 29578,
"predicted": 3706,
"transpired": 23716,
"trotting": 25236,
"dressing-table": 32004,
"owe": 23233,
"victim": 3933,
"summons": 14181,
"Goldbach": 3232,
"interferes": 13549,
"1.024": 26667,
"flashlights": 11826,
"4:30": 22200,
"malignant": 20528,
"Jeffs": 19991,
"society": 476,
"Kindly": 20244,
"Lombardy": 13203,
"SPM": 2676,
"Star": 2998,
"greetings": 14084,
"shitting": 15782,
"relaxation": 24624,
"sweets": 28209,
"predator": 25034,
"surface": 1925,
"embodies": 14629,
"Championship": 11004,
"blacksmithing": 6396,
"08:30": 16607,
"weakening": 25696,
"microscopic": 27871,
"called": 210,
"dissemination": 1354,
"Grammar": 3697,
"complying": 12694,
"bradley": 28139,
"timing": 17689,
"hairy": 30531,
"uniform": 14151,
"Spitfire": 10996,
"Jersey": 11050,
"rsjacobs@Encoreacq.com": 23796,
"cat": 11972,
"cropduster": 20717,
"plotter": 20802,
"Gibraltar": 22513,
"mechanical": 3270,
"Stolmy": 4914,
"DOWN": 29871,
"hairs": 9845,
"chatter": 30297,
"Algeria": 20359,
"Eberhard": 11375,
"waterfalls": 16708,
"619-231-9449": 23878,
"equalise": 13091,
"religions": 13521,
"Marin": 27267,
"Bjerrebyvej": 17297,
"revisions": 21718,
"Kayani": 19713,
"linchpin": 2477,
"Alliance": 18550,
"Higuchi's": 4648,
"Given": 1029,
"unconsciously": 14841,
"balm": 10190,
"Jaquier": 12815,
"strategy": 13890,
"Captured": 17535,
"ASSISTANCE": 24346,
"JUST": 27482,
"intimidating": 9321,
"http://herp-info.webs.com/beardeddragon.htm": 27761,
"Waterproof": 27821,
"gun-oil": 31617,
"pleasantness": 31969,
"Priorities": 22463,
"Client": 21414,
"Cj": 28056,
"encrusted": 9056,
"ways": 74,
"Florida": 12312,
"disagree": 13728,
"poneh": 28043,
"VPP": 23391,
"alr-": 6785,
"Jimmy": 13645,
"platforms": 21575,
"543": 12860,
"glistening": 9694,
"Élysées": 16982,
"Saint": 4972,
"unmistakable": 9688,
"-_-": 27087,
"Experimental": 2815,
"Means": 14469,
"moon": 9364,
"descend": 9452,
"fcking": 29643,
"seeping": 30395,
"acquaintance": 18733,
"deliberate": 14819,
"youngest": 4238,
"Out": 6689,
"militaries": 12888,
"WTA": 10849,
"Researchers": 15292,
"exporter": 24570,
"Giving": 24707,
"Goodwill": 8215,
"City": 2066,
"subdued": 11160,
"survive": 2072,
"Default": 23494,
"clinking": 31183,
"decoupled": 22646,
"mailto:galent@nepco.com": 23184,
"MacGyver": 5758,
"aggravation": 22777,
"atheists": 32573,
"economizing": 11642,
"Enjoyed": 28606,
"gives": 1852,
"convience": 23157,
"spread": 4744,
"ownership": 10461,
"hospitals": 20407,
"Arms": 5872,
"dispersal": 20721,
"populated": 15286,
"136": 14980,
"gym": 8843,
"extras": 11755,
"flowed": 21421,
"ethics": 15141,
"MO": 22605,
"Harpoon": 25796,
"BOTHERED": 28907,
"schema": 30112,
"guideline": 31546,
"attentions": 31882,
"monarchy": 19505,
"readings": 11017,
"1835": 14734,
"crafts": 29536,
"uppercasing": 24170,
"outcome": 3063,
"felicity": 1913,
"runaround": 29420,
"Suspension": 23987,
"recruit": 19386,
"magnifying": 6865,
"2.5": 13934,
"2020": 13815,
"conforms": 30033,
"pizza": 6971,
"jeju": 26587,
"drafting": 14769,
"integrated": 1598,
"shopped": 29192,
"Lebanon": 20533,
"display": 274,
"rehab": 17990,
"tighter": 28036,
"1588": 25380,
"Zahā": 4469,
"looming": 9052,
"Félicie": 3897,
"transcriptome": 10624,
"1834": 14757,
"Mars": 23405,
"Empire": 4406,
"outgrow": 6742,
"Anthropologist": 15492,
"crisis": 2448,
"IMO": 26869,
"lesser": 7616,
"lets": 8782,
"chiefs": 19893,
"bakeries": 29504,
"1562": 15409,
"Employment": 23084,
"laboratory": 18066,
"locate": 15554,
"Khinssacasnondelibreatenibever": 18094,
"former": 3599,
"ours": 6513,
"Ft.": 20691,
"shops": 6163,
"edifices": 15317,
"Disposable": 19381,
"Cancer": 25270,
"Walrus": 25617,
"PC": 12778,
"AREA'S": 26155,
"initiator": 1768,
"messengers": 30955,
"distractions": 7675,
"Jarrold": 4119,
"1640": 14880,
"impart": 18372,
"EVERY": 28733,
"Caron": 3548,
"man's": 5970,
"Push": 17917,
"74419": 23556,
"Trying": 6904,
"shot": 4021,
"accompany": 23449,
"greed": 24871,
"Biomed": 13976,
"absoulutely": 28552,
"Acedraz": 25455,
"shave": 28144,
"skytrain": 17124,
"impatient": 29603,
"hypnotizing": 17823,
"Facility": 22632,
"sheltering": 9037,
"Anti-Israeli": 18919,
"marched": 14719,
"Herbert": 24355,
"deteriorated": 19524,
"rampaged": 18868,
"prefer": 11691,
"riots": 4035,
"achieving": 5649,
"forty": 7069,
"email": 7792,
"backside": 5258,
"among": 804,
"socialism": 25200,
"和": 14902,
"AMERICAS": 22027,
"215": 26018,
"anglo": 27627,
"runflats": 29739,
"lens": 15510,
"1689": 4369,
"commonplace": 8305,
"analogy": 11155,
"Future": 1952,
"deadly": 7785,
"manage": 3015,
"happen": 7638,
"Speaker’s": 14105,
"creates": 10819,
"clamps": 26833,
"Jawaharlal": 14000,
"5.87": 26015,
"Earth's": 24825,
"Sage": 22048,
"Guess": 6441,
"menus": 32404,
"Northwestern": 13326,
"Visitors'": 16573,
"confine": 7240,
"obsess": 15727,
"purchased": 16444,
"Floo": 32227,
"usurp": 30372,
"reliability": 1343,
"atrophied": 28003,
"BK": 28668,
"beating": 11039,
"gate": 15733,
"fairly": 17150,
"Highly": 13811,
"Russian": 3678,
"'Akkab": 18525,
"distresses": 25636,
"rudeness": 28951,
"conquerors": 31024,
"poach": 13943,
"Navtej": 7285,
"watered": 9895,
"Lamonica": 19455,
"deepening": 13868,
"forestry": 25048,
"national-level": 31429,
"Vaisseau": 11427,
"simply": 1834,
"skydiving": 18180,
"trams": 16979,
"Hellada": 28177,
"MYTHS": 18657,
"Demante": 3922,
"filed": 7496,
"lump": 7956,
"Visualisations": 24598,
"Huver": 23877,
"Statistical": 13555,
"Africa": 1978,
"Barstool": 5226,
"wel": 26207,
"cart": 18171,
"Skype": 7795,
"Rosalee": 21760,
"Myanmar": 12159,
"resounding": 25238,
"qualitative": 1622,
"shut": 7738,
"needy": 17997,
"Works": 11572,
"topographic": 15307,
"+852": 20922,
"Unlike": 11304,
"04:41": 23206,
"Studies": 2663,
"dip": 28440,
"presumably": 29458,
"electricity": 2117,
"roadways": 16552,
"5000": 4758,
"evened": 28328,
"incandescent": 2162,
"bodies": 1453,
"handsome": 4669,
"ingested": 10299,
"discovery": 8747,
"squeaky": 27205,
"EDU's": 31524,
"quitter": 14403,
"charities": 10787,
"internship": 10258,
"U.S.A": 21555,
"audiences": 315,
"Swift": 19241,
"society's": 3450,
"by": 207,
"invention": 7947,
"broaden": 650,
"Stop": 7758,
"colleague": 8017,
"Gratification": 15208,
"spool": 30476,
"STAY": 29274,
"Usage": 29307,
"friendly": 2223,
"mixer": 17873,
"uncommon": 13672,
"axis": 15608,
"GOP": 20059,
"#analysis": 7660,
"overheated": 31134,
"Upon": 2018,
"source": 2118,
"Most": 482,
"Bearded": 27734,
"fullness": 14078,
"cm": 17791,
"129": 28202,
"loathing": 17998,
"Claude": 24585,
"religiously": 25740,
"patronage": 27101,
"Ranong": 19594,
"Copan": 15389,
"(c)": 2459,
"Data": 3822,
"x3-9890": 22996,
"gerbil": 27677,
"talks": 10394,
"berth": 30813,
"donors": 13279,
"+44": 20927,
"yielding": 13059,
"Patriot": 19382,
"d'état": 4541,
"sir": 7171,
"ignorance": 8744,
"Visualization": 24604,
"gasps": 27653,
"revived": 18646,
"665": 24475,
"Ship": 32583,
"label": 327,
"Castagnola@ENRON_DEVELOPMENT": 23208,
"Bond": 23523,
"scrubby": 9727,
"DEAL": 28910,
"Can": 7279,
"automatically": 610,
"chunk": 7919,
"Pandolfi": 8006,
"freed": 14793,
"unsure": 1373,
"9866": 20929,
"deciding": 25279,
"Dynegy": 22745,
"quid": 10409,
"Waugh's": 4121,
"tax": 8395,
"Usmani": 19674,
"Husband": 32420,
"sinnel": 27199,
"reside": 3631,
"NEVER": 11856,
"exhibit": 13267,
"manned": 24776,
"Hopper": 13258,
"’ve": 7721,
"juggling": 27503,
"scandal": 25902,
"Offices": 23874,
"Jordanian": 30754,
"Sabeer": 24166,
"Exceptionally": 15011,
"flavorful": 18465,
"clump": 31177,
"Garden": 22530,
"Shakspere": 25342,
"theatre": 4236,
"delicately": 29096,
"first": 298,
"McDonald": 17337,
"robes": 32040,
"Chineese": 28153,
"outreach": 12220,
"creaks": 32148,
"Kowloon": 12470,
"Hein": 1981,
"deep-rooted": 31345,
"THEN": 27872,
"Sellafield": 31486,
"pollutant": 1321,
"fit": 6105,
"attempted": 1478,
"Monde": 30595,
"SSA": 2675,
"futuristic": 15078,
"sooner": 7717,
"Share": 8541,
"stinging": 10648,
"Bend": 29291,
"entirely": 7737,
"embraced": 14488,
"nearer": 32265,
"withdrawn": 12980,
"Abbotsford": 22238,
"ANSI-92": 30039,
"headlong": 9980,
"Aster": 27411,
"pall": 32832,
"violence": 9621,
"forms": 359,
"Hood's": 25001,
"disturb": 26418,
"compression": 28019,
"tortoise": 30327,
"hot": 6397,
"kind-faced": 32199,
"inequalities": 533,
"corking": 28966,
"158,000": 15671,
"345": 13154,
"foot": 4314,
"capacities": 13861,
"Percentiles": 15643,
"Kosovo": 13920,
"delicacy": 29996,
"spawning": 27853,
"breeded": 9437,
"directionless": 32784,
"quinoa's": 18376,
"blood-stained": 32242,
"refuge": 13040,
"abolishing": 20499,
"Hedwig's": 32079,
"flashlight": 26730,
"rigorous": 443,
"who’ve": 10107,
"lanterns": 12925,
"reservations": 20932,
"Governor": 14460,
"Exotic": 22694,
"town’s": 16545,
"levitated": 32669,
"unreliable": 1255,
"tantalising": 9015,
"overstay": 27378,
"Sehar": 12243,
"informative": 28271,
"spatial": 2565,
"quinoa": 18354,
"Jeremiah": 30649,
"corruption": 4343,
"website": 1088,
"assailants": 9653,
"shovel": 21264,
"Holt": 4768,
"giggling": 8726,
"sheds": 24842,
"937,000": 17404,
"Nathaniel": 25415,
"collaged": 10123,
"scissored": 32389,
"hollering": 24404,
"gardens": 12624,
"Sanctified": 5910,
"mobilised": 24441,
"2,500": 11556,
"boisterous": 29830,
"Mountain": 8807,
"ascendance": 14358,
"kicks": 8103,
"Ivan": 5455,
"descriptive": 15199,
"Information": 2229,
"24,000": 24968,
"oven": 17866,
"booth": 12609,
"retiree’s": 7934,
"Qtr3": 30149,
"Table": 20934,
"pension": 32691,
"217": 21079,
"pimple": 15702,
"riddled": 28717,
"Surrounded": 15388,
"retroactive": 11561,
"Moon": 9361,
"Latino": 14361,
"hike": 15971,
"Karzai": 19638,
"ended": 3288,
"null": 30062,
"kibbutznik": 30779,
"Sons": 273,
"sweeping": 9942,
"Representatives": 14102,
"Tulsa's": 17510,
"Pax": 13784,
"Cooper": 12993,
"Barno": 19693,
"Ugly": 4088,
"Democrats": 12446,
"11": 505,
"Grand": 3640,
"predecessors": 6017,
"forgive": 11567,
"Hydrogen": 10230,
";)": 24240,
"intolerance": 4364,
"Spa": 27509,
"Mohawk": 22300,
"fluids": 3281,
"garment": 32787,
"Usenet": 24334,
"cited": 7618,
"grocerys": 27601,
"Burroughs": 12018,
"1890": 16384,
"Epic": 5273,
"unbearable": 25309,
"Mails": 25325,
"Jemaah": 20724,
"Bengal": 19586,
"Percell,": 22903,
"anxieties": 14182,
"Rem": 4553,
"Atlantic": 13901,
"existent": 25713,
"=(": 26301,
"Governor's": 31929,
"noir": 4126,
"enhancing": 11637,
"handkerchief": 9876,
"Bernoullis": 3161,
"Mesa": 17134,
"ALWAYS": 21466,
"future": 1966,
"parental": 26546,
"faithless": 31284,
"parameters": 2550,
"invest": 8511,
"LV": 10978,
"subsidiary": 24364,
"active": 2581,
"Ferjani": 13141,
"Shaikh": 18468,
"CRA": 552,
"i-": 6114,
"appy": 26194,
"co-ownership": 7979,
"5th": 20634,
"Tina": 10985,
"gated": 24293,
"Nacional": 963,
"post-modern": 13411,
"beckons": 14028,
"Shahar": 30610,
"Again": 8438,
"Bradley": 7546,
"Divine": 10148,
"three": 524,
"there'd": 32820,
"helping": 4387,
"voicing": 18844,
"Libby": 25959,
"gtee": 23228,
"24": 1396,
"sonnet": 1086,
"2023": 12953,
"Last": 4732,
"disc": 20601,
"Gon": 6415,
"reward": 11066,
"Carroll": 9801,
"bestseller": 10381,
"duplicity": 22780,
"CDT": 22970,
"furthering": 14086,
"prejudices": 11216,
"shrinking": 32164,
"17": 510,
"comment": 3059,
"expecting": 5849,
"hobby": 10331,
"vowels": 18116,
"Shamanism": 20219,
"Box": 21821,
"sorted": 29339,
"vitalized": 13855,
"athletes": 10866,
"Chief": 7218,
"concluding": 19432,
"Fabio's": 20166,
"Written": 32223,
"concentration": 7787,
"Visualizations": 24594,
"80": 10378,
"frankly": 7302,
"pace": 9952,
"Arthritis": 24055,
"dozen": 7700,
"u.k": 26305,
"spay": 29401,
"h": 25730,
"Haas": 22445,
"Spend": 24602,
"Creativity": 20011,
"Italy's": 13358,
"runway": 17156,
"Overpriced": 28598,
"Sanders": 23760,
"stipes": 27791,
"mid-July": 23522,
"Organization": 8052,
"swallow": 18017,
"silver": 10989,
"gravitational": 15543,
"binding": 9857,
"Ladakh": 19120,
"prompting": 12939,
"Resource": 23439,
"Shiraz": 16220,
"Collaboration": 2425,
"possible": 467,
"WHO": 11851,
"yea": 27290,
"Taylors": 22202,
"Gossip": 30731,
"Landgraf": 11380,
"----": 21350,
"midterms": 25900,
"persecution": 3140,
"scam": 27026,
"ideal": 7976,
"mangers": 29530,
"Egypt": 5930,
"seasoned": 27861,
"unorthodox": 10661,
"Brook": 3273,
"Yeo": 13031,
"08/17/2000": 22103,
"hugs": 27950,
"http://www.petsathome.com/shop/combi-1-dwarf-hamster-cage-by-ferplast-15986": 26488,
"Mongolian": 28878,
"person": 6590,
"reservoir": 23401,
"Costs": 23484,
".:": 24906,
"Editor": 30196,
"non-crumbly": 27858,
"letting": 6897,
"leader": 3355,
"CONTACT": 24757,
"glad": 6234,
"Loch": 23388,
"brainer": 28344,
"$": 5216,
"filtered": 15022,
"bemused": 31415,
"plenty": 16548,
"job": 7138,
"abuse": 11668,
"spadework": 20876,
"Peter's": 30264,
"1810": 23873,
"simplest": 18330,
"milestone": 10768,
"Cafasso's": 16600,
"Higuchi": 4598,
"rowing": 32526,
"advisers": 23705,
"functioning": 1583,
"obligation": 19218,
"Shop": 28059,
"Duct": 28824,
"attract": 914,
"_report.xml": 30125,
"Pian": 3495,
"Tajik": 19720,
"12:01": 23543,
"street": 8987,
"vastness": 24614,
"ymsgr:sendIM?mayursha&__Hi+Mayur...": 25329,
"handcuffed": 12206,
"swapped": 13630,
"Somebody": 13528,
"chasers": 18307,
"Child's": 4704,
"PGT": 21305,
"distort": 15619,
"liquidation": 22326,
"crumples": 8833,
"???": 21784,
"capabilities": 8370,
"movie": 5753,
"MUCK": 11937,
"detected": 25575,
"rhinoceros": 32034,
"calculation": 15692,
"Tanker": 25776,
"crawl": 17001,
"omnipotent": 6650,
"torrents": 8922,
"grade": 9546,
"MUD": 24246,
"119th": 30397,
"legitimacy": 1347,
"pleaded": 5976,
"SPRING": 11861,
"inspiration": 15253,
"Hypnosis": 17812,
"Sincerely": 11676,
"disadvantages": 10777,
"profilers": 20673,
"lb.": 21750,
"infield": 30508,
"lends": 15282,
"Tåsinge": 17233,
"times": 1371,
"geologist": 4231,
"terrifying": 19891,
"Walters": 21508,
"Haim": 20347,
"NCAA": 4849,
"ERCOT": 22870,
"1860s": 17064,
"telephone": 23835,
"accountant": 29870,
"Hafijj": 17145,
"01:09:32": 23951,
"Ten": 7030,
"Phone": 21415,
"apron": 27638,
"municipality": 13978,
"suburban": 16388,
"foster": 27458,
"06:02": 24506,
"pots": 31561,
"Czechoslovakia": 10430,
"origin": 4270,
"strategies": 596,
"Chatnam": 16253,
"Eelam": 19004,
"creams": 26968,
"superb": 10898,
"stategy": 20992,
"debit": 29031,
"Leno": 13661,
"urgently": 14383,
"industries": 15060,
"dmetcalfe@cullenanddykman.com": 21493,
"macadamia": 17899,
"Exocets": 25802,
"Nelson": 14598,
"profitable": 3609,
"notably": 3941,
"Apa": 5992,
"NO": 19476,
"Alena": 21972,
"Suzanne": 28276,
"lieutenant": 4355,
"horizontal": 2632,
"pro-Zionist": 18961,
"willed": 31828,
"remodelling": 17583,
"centimetre": 24128,
"Magazine": 10533,
"snowy": 9703,
"zoo": 21249,
"percentile": 15636,
"promise": 8410,
"vanishing": 30891,
"Mozilla": 12774,
"exclusive": 11101,
"345-9945": 21416,
"chloride": 27895,
"Shot": 18413,
"Kensington": 31570,
"simplicity": 10967,
"endemics": 17186,
"souls": 19974,
"yummy": 29327,
"Riders": 17509,
"reflected": 830,
"buckled": 9350,
"cinnamon": 15888,
"literary": 4658,
"welcoming": 27276,
"facilities": 7605,
"Ware": 8236,
"awake": 8601,
"Senate's": 9301,
"armholes": 8612,
"fascinates": 15434,
"Admiral": 17473,
"Fourth": 7359,
"competence": 14654,
"crest": 9004,
"FIRST": 12062,
"Bertrand": 3375,
"Manchester": 17522,
"575": 22249,
"Parama": 24099,
"lead": 371,
"preserve": 14245,
"sang": 9007,
"Marbles's": 5271,
"they’re": 7814,
"activities": 1599,
"plain": 9818,
"kits": 12656,
"All": 890,
"Resilience": 15216,
"100,000,000,000": 24371,
"banners": 20456,
"asceticism": 32855,
"disposition": 32492,
"Nuria_R_Ibarra@calpx.com": 23814,
"Cause": 6434,
"columns": 7701,
"sensory": 7752,
"pupils": 16833,
"leg": 10725,
"thugs": 19353,
"beds": 8936,
"Maya’s": 15383,
"rabbi": 14367,
"selectively": 18144,
"Mapplethorpe": 13394,
"article": 2251,
"Length": 26063,
"containing": 2179,
"Episcopal": 13237,
"successor": 5912,
"obedience": 5945,
"vodka": 10516,
"economy": 754,
"correspond": 21677,
"Laughing": 27982,
"sought": 7401,
"barcodes": 29308,
"designers'": 30009,
"washing": 4618,
"worries": 24802,
"publications": 1328,
"creations": 2974,
"Maldives": 14206,
"800.713.8600": 23326,
"reconvened": 14745,
"specks": 31097,
"boiling": 32579,
"categorization": 3075,
"Wooh": 16236,
"banishes": 7449,
"fade": 32684,
"picks": 6488,
"Olympic": 8405,
"Leslie": 22877,
"afar": 9450,
"<<": 21063,
"stage": 299,
"republic": 24358,
"occasion": 11058,
"schoolchildren": 17368,
"guacamole": 28489,
"levers": 9940,
"#pathos": 7824,
"collection": 95,
"Residential": 7184,
"carafe": 32403,
"commissions": 11417,
"innovation": 7445,
"rediscover": 14419,
"pjɛʁ": 3503,
"compensate": 17651,
"Roadhouse": 29397,
"Revised": 21032,
"briefcase": 32791,
"pens": 30483,
"Shires": 6420,
"strolled": 31201,
"lifestyles": 15269,
"value": 1915,
"biologically": 17039,
"see": 247,
"Seleznov": 23087,
"edges": 4008,
"Yannick": 13098,
"CEC": 22792,
"toothache": 28254,
"Weekly": 11149,
"Drink": 10191,
"envelop": 25886,
"mayor": 7652,
"Megapixel": 26223,
"Karachi": 20743,
"She's": 6125,
"08:22": 23791,
"inconsiderable": 32835,
"insisting": 32329,
"holiday": 16784,
"94": 4653,
"carbs": 16170,
"to-": 6871,
"Derivatives": 22517,
"Comex": 19583,
"aging": 2207,
"Chasers": 18296,
"imposition": 15467,
"heater": 26712,
"Asset": 29521,
"colossal": 31089,
"unravel": 32788,
"Earls": 32897,
"rarely": 1864,
"Enemy's": 9240,
"peanutjak...@usa.com": 24337,
"mormon": 26454,
"semester": 15528,
"Rise": 21877,
"1)": 10806,
"ache": 32038,
"MfM": 25371,
"god’s": 10188,
"hooligans": 14326,
"twenties": 11019,
"Higher": 19180,
"Glasgow": 29636,
"vampires": 9574,
"struck": 6195,
"Galante": 16644,
"subterfuge": 20182,
"WOW": 28419,
"Angelic": 15908,
"pinkish": 32185,
"imports": 31527,
"inflation": 14409,
"parade": 12618,
"1950s": 3454,
"Designed": 19473,
"01:39:56": 22919,
"Rocca": 19117,
"weeks": 1647,
"unprecedented": 11213,
"sprays": 15063,
"Nagin": 24418,
"drum": 8963,
"pacifically": 30920,
"week": 2855,
"satisfy": 1211,
"expands": 8114,
"void": 20098,
"tutor": 32839,
"noons": 9198,
"rot": 19954,
"guider": 6895,
"Prom": 11735,
"esimien@nisource.com": 21928,
"scriptural": 24690,
"curious": 4748,
"creeping": 9965,
"Cleveland": 8563,
"Qaeda's": 20625,
"Reports": 12950,
"cactus": 26368,
"fist": 9652,
"fresh-faced": 32463,
"Money": 6132,
"s.hernandez@udc.es": 2244,
"ensign": 31121,
"point": 1519,
"make": 590,
"2009": 1580,
"Global": 12063,
"exploitation": 2359,
"empire": 9210,
"rescue": 12186,
"inversion": 20126,
"types": 1161,
"http://www.playatmcd.com/en-us/Main/Gameboard": 26341,
"Luxembourg": 11435,
"thing": 6359,
"EVEN": 11834,
"AUD": 22216,
"lent": 6424,
"narcotic": 9369,
"281-735-5919": 23630,
"higher": 1312,
"sighs": 8872,
"faulty": 4429,
"ashamed": 9143,
"Gorman": 14309,
"sanctions": 24568,
"superiors": 17342,
"Muttering": 32276,
"jets": 19204,
"gras": 29490,
"UFOs": 25022,
"supposedly": 19897,
"research": 174,
"REALLY": 21518,
"THX": 28868,
"McGrath": 16006,
"Khan’s": 19739,
"Sao": 23195,
"mailing": 12711,
"zoom": 26219,
"Rae": 6091,
"redeems": 31029,
"Plantation": 23240,
"Bob": 14454,
"tuning": 23549,
"Equine": 26111,
"DO": 11832,
"gulf": 20079,
"relay": 25931,
"firepower": 27714,
"Thoroughly": 28162,
"inspirational": 9648,
"18:20": 22629,
"large": 416,
"1968": 3705,
"amputated": 32386,
"<UNK>": 1,
"Class": 4867,
"god": 7006,
"concertina": 30991,
"struggle": 14044,
"transferable": 23528,
"quadruplets": 32717,
"Erebus": 30944,
"Arakan": 19510,
"affordable": 14541,
"databases": 23126,
"Makkai": 21040,
"“": 690,
"GOING": 21521,
"Nowadays": 2089,
"RTE": 2687,
"elder": 6004,
"Strasbourg": 3196,
"Renton": 28933,
"thinset": 29559,
"Pimentel": 4915,
"I’d": 7715,
"Orissa": 19588,
"eliminating": 20909,
"Almost": 15454,
"Juego": 25454,
"Liz": 22289,
"sorry": 6811,
"clutches": 32085,
"Yung": 12443,
"mailto:amy.cornell@compaq.com": 22140,
"conviction": 19429,
"jade": 15329,
"PDT": 20270,
"optionality": 21218,
"leaked": 12977,
"1.877.999.3223": 22813,
"Salsa": 29220,
"Rodents": 26569,
"watches": 30834,
"pouch": 6027,
"Shake": 18062,
"earlier": 2384,
"Remain": 18184,
"extradite": 27664,
"Stridon": 4973,
"corns": 26893,
"byproduct": 10495,
"Constantine": 17533,
"35": 15113,
"groups": 840,
"Liberia": 19886,
"Hue": 27721,
"http://i.imgur.com/S2MD2.jpg": 27164,
"waitress": 29156,
"Kit": 30169,
"attitude": 15256,
"fuck": 13618,
"necks": 30589,
"victory": 12458,
"companies": 1324,
"reminded": 10020,
"lackluster": 19573,
"probable": 25749,
"DISCOURSE": 14912,
"typo": 27516,
"1/4": 17862,
"topic": 10242,
"barred": 8415,
"buzzwords": 13383,
"glorious": 7680,
"promising": 4684,
"nonconventional": 20680,
"Lower": 32187,
"Wat": 17389,
"McNeally": 21545,
"Instant": 17950,
"Colonial": 16973,
"alluded": 6874,
"sci": 5797,
"podcasts": 2971,
"Draco": 32082,
"performance": 902,
"Bonacci": 5472,
"191": 13884,
"Crockett": 14790,
"Parker": 32607,
"au": 5402,
"Wire": 20766,
"frowning": 31082,
"Henley": 25640,
"Coeur": 29334,
"Jerry's": 21845,
"roughest": 6066,
"bathe": 18018,
"aggregate": 548,
"raging": 30859,
"alarmed": 17943,
"sole": 21495,
"disability": 10869,
"NASA's": 24492,
"leered": 32288,
"aerated": 10279,
"signage": 28928,
"UNLIMITED": 28521,
"TA": 28795,
"family": 3113,
"sink": 7695,
"hadn’t": 10174,
"scientology": 12729,
"sour": 18458,
"tail": 2730,
"east": 10413,
"BTA": 27014,
"reasonable": 1313,
"thouhgt": 29553,
"Omnimax": 16426,
"program's": 24780,
"Cowpland": 24156,
"9th": 4954,
"Frontiers": 1377,
"upright": 15531,
"percentiles": 15631,
"trains": 20432,
"Asher": 25663,
"Equality": 24651,
"deadlines": 15738,
"2004": 1609,
"Arabic": 4466,
"kicking": 10463,
"yards": 21510,
"HOAX": 24449,
"divert": 25506,
"dipping": 9061,
"fidgeted": 31272,
"ireland": 26307,
"ONLINE": 22484,
"04:13": 21724,
"wagging": 27702,
"prevalent": 2997,
"freedoms": 13873,
"Sat": 16608,
"connections": 6885,
"Walsingham": 25362,
"Jackson": 11016,
"Stony": 8534,
"chart": 10733,
"flunking": 14799,
"Clifford": 14824,
"emperor": 18357,
"directors": 5488,
"feelings": 8754,
"clip": 15823,
"toes": 24053,
"amazes": 28681,
"somewhere": 6076,
"nigiri": 29590,
"Hiring": 10717,
"weirder": 20096,
"Addressing": 30605,
"Southwest": 17031,
"has": 128,
"wind": 2650,
"dilemmas": 20501,
"cozy": 21980,
"pre-killed": 27365,
"Capote": 13342,
"repay": 11555,
"VIP": 12198,
"Centilli": 22722,
"02:19": 23840,
"valuable": 566,
"Ed.": 10950,
"herself": 5290,
"F.R.S.": 25391,
"thematically": 27910,
"buys": 28617,
"fireplace": 15559,
"1750": 3222,
"faithful": 12051,
"Onion": 11098,
"Natalie": 24415,
"hauls": 21241,
"Funny": 20025,
"aunt": 25228,
"balsa": 26839,
"Doris": 6680,
"bullshit": 23904,
"figuring": 6446,
"Mexican": 6033,
"income": 7837,
"es": 18068,
"Amsterdam": 16757,
"Ground": 11052,
"Tough": 23917,
"grown": 8235,
"Estonian": 12095,
"VI": 14970,
"hostel": 3901,
"essence": 15250,
"hence": 541,
"iis": 22961,
"sincerely": 14471,
"mathematically": 7963,
"Asbestos": 25958,
"Wide": 614,
"Kong's": 12461,
"satay": 28482,
"easter": 27201,
"aid": 14265,
"Turkey": 11242,
"criminologist": 18052,
"1979": 5358,
"liquor": 16612,
"Nick's": 28711,
"monumental": 3436,
"contingencies": 22651,
"presents": 894,
"McCutchan": 13288,
"implants": 8384,
"phased": 26050,
"posts": 7704,
"Chambermaid": 5509,
"81P/Wild": 11301,
"struggles": 5879,
"spotlights": 32757,
"Heidenreich": 264,
"overtopped": 25557,
"César": 5373,
"booked": 13078,
"na": 6048,
"grow": 8123,
"partners": 8512,
"worn": 9526,
"lack": 417,
"listed": 12129,
"Baffin": 24107,
"Trails": 23576,
"amendmnets": 22232,
"hanged": 31158,
"12:21": 21354,
"chimneys": 9054,
"bravest": 30767,
"preserving": 8021,
"garage": 8874,
"Caves": 30750,
"challenging": 2981,
"one's": 6484,
"Mayko": 26507,
"pretend": 14978,
"reprioritised": 22603,
"Hewlett": 14576,
"experienced": 11045,
"A-": 11940,
"fearsome": 9064,
"Ani": 18470,
"awesome": 14373,
"desparate": 24516,
"downgrading": 25926,
"laborers": 17367,
"OLYMPUS": 26202,
"Surgeon": 28126,
"Hasht": 16836,
"Label": 18149,
"boom": 16862,
"Nook": 23949,
"variants": 3770,
"left": 3443,
"Lifetime": 3670,
"operated": 5193,
"coordinate": 2309,
"liberals": 7839,
"508": 11500,
"Cheng": 12390,
"Voters": 12681,
"readers": 7671,
"Fascist": 24739,
"Alastair": 24422,
"Break": 27927,
"gutters": 8949,
"Michel": 26603,
"insolence": 31265,
"geographic": 2260,
"continuing": 13910,
"faced": 12086,
"macadam": 30357,
"Newspaper": 25977,
"Fabiani": 1553,
"529999204044": 17029,
"frothing": 19919,
"Balard": 26608,
"garbage": 29572,
"kippers": 32425,
"ambition": 4674,
"omission": 20383,
"analyst": 20616,
"13279": 20274,
"StoolLaLa": 5228,
"Globe": 12699,
"communicated": 13628,
"normality": 18955,
"Dems": 19211,
"Genesis": 11321,
"committment": 22679,
"uninteresting": 25069,
"Thats": 29727,
"Atomic": 18654,
"Simons": 1552,
"probation": 24304,
"Simon": 3266,
"Diane": 23105,
"28": 1484,
"traitress": 25569,
"WANT": 28401,
"Sanders'": 23811,
"No": 6146,
"ITALIAN": 32483,
"Split": 28516,
"snap": 13440,
"Appendix": 2390,
"imagine": 10034,
"approval": 8179,
"ramp": 19168,
"sledge": 32640,
"mullah": 25737,
"W3C": 30103,
"NEXT": 11896,
"Pawtucket": 4921,
"thumbs": 15999,
"unalterable": 31260,
"soldier": 4330,
"ENJOYABLE": 29662,
"Together": 3279,
"virtual": 11387,
"Sustainable": 14481,
"☏": 17259,
"Netherlands": 3134,
"Paramus": 16504,
"racking": 19215,
">>>": 26619,
"hoax": 24517,
"customer": 10530,
"heel": 24094,
"PEREGRINO": 25409,
"Conclusions": 2365,
"subsidies": 26057,
"Limits": 29522,
"Simien": 21913,
"Voldemort": 32059,
"Gebo": 5526,
"yielded": 20555,
"distorted": 15584,
"over-prescriptive": 31554,
"emphasized": 14250,
"contentious": 18771,
"fund": 5888,
"Uh": 6090,
"embrace": 15158,
"intuitive": 25311,
"Mouez": 13133,
"imperialism": 15466,
"frosts": 27836,
"daughters": 4207,
"umbilical": 25744,
"neuro": 15855,
"Breaking": 1130,
"Wayne's": 12564,
"decisive": 6585,
"motions": 3240,
"Region": 26313,
"Langeland": 17234,
"sporadically": 29363,
"pyjama": 31566,
"wrongful": 32931,
"Technlogy": 12080,
"Finally": 653,
"moniker": 16393,
"invovled": 20031,
"Ruy": 25460,
"Resign": 14390,
"atrocities": 19127,
"spelling": 18111,
"dignitaries": 12199,
"Pirates": 4783,
"WHEN": 11935,
"EST": 18819,
"Linna": 25227,
"cge": 26764,
"pre-made": 29501,
"Art.": 11769,
"Bieber": 16140,
"reminds": 18491,
"Mormons": 20239,
"structural": 5687,
"linguists": 3431,
"wire": 17876,
"perks": 2163,
"14:00": 17024,
"bakery": 27332,
"Dzida": 28179,
"seventeen": 6536,
"pilots": 9266,
"skills": 1536,
"militants": 18614,
"Eden": 13116,
"Ayman": 18740,
"trademarked": 24175,
"Nigel": 28475,
"mischief": 23649,
"Application": 701,
"bitch": 15755,
"allow": 2173,
"removing": 15073,
"caverns": 30645,
"feast": 5008,
"oneself": 8570,
"eremites": 5159,
"MBA": 20944,
"naturalist": 15160,
"Kyle": 13139,
"Sevil": 20955,
".04": 21813,
"Baghdadis": 18567,
"fanfics": 2972,
"scenario": 903,
"Mormonism": 19989,
"swish": 9709,
"Devil’s": 26992,
"65": 21017,
"SpreadingSantorum.com": 10546,
"Flag": 9616,
"pilgrams": 13171,
"Toast": 18373,
"dungarees": 12028,
"veterans": 3606,
"headspace": 16153,
"yelled": 29084,
"Professional": 4863,
"picnickers": 9806,
"Anthrax": 20574,
"105": 23889,
"Ham": 28363,
"bag": 6940,
"polishing": 3878,
"Geri's": 6123,
"10:07": 23188,
"lovin'": 28721,
"So": 6135,
"lanky": 17755,
"Guest": 4187,
"51,516": 12487,
"850": 25041,
"REAAAALLY": 28738,
"renal": 27068,
"inwardness": 30373,
"Holderness": 29255,
"7.2": 15019,
"compassionate": 27655,
"06:20": 22368,
"despite": 1382,
"indicators": 9941,
"trace": 9962,
"huge": 6474,
"depiction": 25210,
"interesting": 1961,
"inch": 7379,
"Piaget": 15030,
"maam": 21455,
"resign": 14410,
"teenager": 12809,
"ISS": 24479,
"beguiled": 31326,
"Hence": 5662,
"movies": 4766,
"equating": 18862,
"prankster": 17911,
"inhabitants": 15274,
"psychiatrists": 26080,
"Gu'ud": 19327,
"Richmond": 28645,
"inclined": 6892,
"foreigner": 19139,
"bat": 18328,
"collected": 683,
"epistemologies": 2538,
"Rick": 10488,
"Rumsfeld": 25974,
"hammered": 32157,
"ANYWAY": 28759,
"philosophy": 3220,
"Sufaat": 20646,
"1691": 21090,
"حديد": 4468,
"alchemical": 20286,
"ROMs": 26161,
"Valentin": 10109,
"Plant": 17733,
"buttery": 15924,
"filler": 28961,
"cooperating": 13905,
"Boom": 13794,
"pictures": 1996,
"phobia": 29215,
"Kermit": 5335,
"Bush's": 18846,
"detrimental": 10302,
"go's": 15941,
"Elite": 29412,
"horizons": 25299,
"10:39:03": 21597,
"represents": 2976,
"received": 3648,
"Eurostar": 22195,
"leisurely": 11407,
"LLC": 21101,
"tonic": 17804,
"eis": 26967,
"Winging": 27884,
"scent": 15936,
"bush": 15979,
"Schadenfreude": 13723,
"Aguilar": 13084,
"Fedayeen": 18572,
"reformer": 6609,
"Wonderland": 11273,
"Murders": 19963,
"Philosophy": 10372,
"inconvenienced": 32950,
"effected": 24892,
"preoccupied": 30432,
"snitches": 18335,
"LAST": 29143,
"Presidents": 14452,
"angels": 5794,
"par": 28713,
"traditional": 3400,
"Hyatt": 21562,
"BENEFIT": 24531,
"Murfreesboro": 29733,
"occupation": 7627,
"unfortunately": 2905,
"sarcastic": 9909,
"repition": 27541,
"revolution": 4372,
"charmed": 31068,
"reread": 15260,
"man-about-town": 31733,
"heavens": 10145,
"suspension": 14737,
"sheriff's": 12338,
"million": 2124,
"lawless": 20512,
"ar": 26365,
"circulation": 8108,
"x34703": 22664,
"smacked": 13416,
"benches": 32937,
"McFarlane": 1608,
"substitutes": 8039,
"Landfall": 19512,
"snapping": 32527,
"CAROLS": 2664,
"chilly": 31927,
"Sarah": 20942,
"OpenAI": 13691,
"7:40": 11754,
"pregnancy": 16150,
"sobriquet": 25418,
"parking": 9556,
"Qanooni": 19723,
"boyfriend": 5304,
"Xbox": 8561,
"unruly": 20062,
"Cherokee": 15419,
"853-7557": 23074,
"peak": 1299,
"fucking": 13608,
"Distances": 25206,
"mountains": 13951,
"admitting": 29034,
"exist": 1000,
"wikis": 10825,
"peddle": 28897,
"Unhunh": 6922,
"bestowed": 32727,
"strip": 7461,
"fighter": 9271,
"unprofessionalism": 29856,
"VEGAN": 24907,
"Minkin": 23268,
"Maryam": 20074,
"750": 19628,
"melded": 19829,
"1300": 29054,
"10.0": 23608,
"fraction": 7106,
"Votaw": 21378,
"gut": 29204,
"downloading": 28264,
"miniature": 26826,
"TEN": 18670,
"5.8": 27886,
"verb": 1145,
"lucky": 6759,
"bills": 8628,
"Sacred": 18965,
"autonomy": 8392,
"dinners": 27931,
"thanks": 6481,
"recognised": 5001,
"tasted": 17988,
"lorry": 32394,
"appropriation": 20287,
"passcode": 21696,
"moll": 5400,
"stink": 8656,
"attacking": 13095,
"RefLibPaths": 30197,
"brimming": 25314,
"Guys": 15985,
"mm": 22609,
"Officer": 20838,
"03:20": 23554,
"Day": 4733,
"Pediatricians": 1268,
"palette": 16222,
"aa": 29409,
"companion": 2958,
"desirer": 32665,
"wolf's": 25032,
"hydrated": 14814,
"delivering": 20240,
"mitigated": 21325,
"ADSL": 26520,
"reckoning": 14116,
"hippie": 23902,
"killed": 12248,
"Wagner's": 32614,
"catholic": 13189,
"tweet": 12200,
"channels": 10881,
"tens": 17069,
"Road": 15966,
"nitrogen": 18029,
"cross-functional": 23856,
"creativity": 7457,
"hesitated": 15497,
"seize": 25254,
"Knudsen": 23141,
"inconvenient": 25283,
"PUCT": 22852,
"apparatus": 19839,
"Lopez's": 25449,
"idols": 9415,
"exhibition": 13285,
"rambunctious": 26858,
"seriousness": 27630,
"Lemell": 23552,
"Maize1_1017013": 1848,
"Galois": 3833,
"inhaling": 13710,
"raffles": 12597,
"Large": 13697,
"hazards": 26972,
"exceeds": 28682,
"dirty": 9758,
"Emminence": 19269,
"assure": 13209,
"77": 16572,
"detectors": 11373,
"Books": 18131,
"shorthanded": 30835,
"AUCTION": 24532,
"01/26/2001": 23383,
"blindfolds": 26078,
"Discussing": 12168,
"Agreements": 23104,
"return": 716,
"solstices": 15320,
"percentage": 8078,
"sweeper": 25649,
"garnered": 4114,
"Chrome": 12777,
"artful": 32655,
"word's": 1720,
"Moloch": 30627,
"Nixon": 7850,
"Columbia": 15992,
"Germany": 4316,
"starring": 5494,
"HICKENLOOPER": 14356,
"5.37": 21927,
"Adopts": 23288,
"transition": 14288,
"longitude": 2330,
"doubtless": 9226,
"Read": 10755,
"vote": 8144,
"poem": 10957,
"structures": 10619,
"surfaced": 19052,
"1940s": 3488,
"Cyprus": 30800,
"Aren’t": 9887,
"ld2d-#69334-1.DOC": 22441,
"dunes": 17182,
"use": 998,
"swaying": 9428,
"whenever": 7075,
"orderd": 29161,
"illness": 3212,
"catagory": 29417,
"aquavit": 30794,
"Bernie": 31516,
"CRACKDOWN": 19976,
"713-793-2000": 22145,
"Clyst": 4245,
"Loved": 28061,
"accompanied": 5119,
"schedulers": 23655,
"cleverly": 19758,
"armchair": 30277,
"jewelry": 6162,
"Buy": 16590,
"CA's": 23270,
"Quaid": 5773,
"collar": 9847,
"invoiced": 21908,
"withhold": 23691,
"Nonna's": 16120,
"Leisure": 16413,
"testify": 19406,
"Barger’s": 15503,
"Marquis": 3571,
"Greyhound": 17121,
"Baluchistan": 18763,
"WMDs": 26106,
"Peach": 5336,
"mailto:galen.torneby@nepco.com": 23185,
"troubled": 8745,
"Dranove": 10388,
"Laidlaw": 21731,
"memory's": 15866,
"Whatever": 3987,
"Resources": 14498,
"commitee": 22677,
"recognises": 31432,
"copper": 18042,
"federation": 5917,
"curse": 10170,
"paralegal": 22058,
"doc": 23225,
"heresy": 5145,
"Mashhad": 16763,
"hiatus": 23520,
"Sunshine": 23973,
"Walking": 3002,
"fairest": 11537,
"Elliott": 5855,
"RVS": 17424,
"assert": 5977,
"menacingly": 32398,
"radiative": 2684,
"Shortstop": 4772,
"Curr": 21664,
"solved": 13980,
"literal": 13542,
"strikingly": 19252,
"enovate": 21942,
"Lisbon": 27527,
"attendants": 30560,
"Onward": 20331,
"Rance@ENRON": 23743,
"Intel": 24173,
"dismissing": 19504,
"assuage": 29067,
"multiethnic": 15370,
"Amen": 21357,
"raise": 9601,
"curly": 29288,
"Gyanendra": 19503,
"denounced": 30729,
"joking": 14820,
"mournful": 30894,
"rumpled": 30409,
"cabinets": 29101,
"incentive": 1464,
"accusing": 20882,
"Colorado": 13446,
"Awards": 4097,
"Ranja": 14496,
"uncover": 20158,
"socio": 20212,
"happens": 885,
"predisposition": 20887,
"Past": 351,
"borritos": 29164,
"Clem": 11123,
"Greek": 3372,
"retired": 3813,
"lazy": 10171,
"Picture": 14809,
"redefined": 15119,
"asians": 27258,
"inspecting": 30336,
"loyalty": 14672,
"rally": 19500,
"consumed": 13385,
"prominent": 3111,
"Crabs": 17225,
"stamp": 10836,
"chair": 7346,
"Leonard": 20826,
"Kiev": 4352,
"ballads": 32530,
"known": 1210,
"whither": 9390,
"repressed": 25660,
"concerto": 31655,
"sister": 2506,
"activism": 3847,
"IQ": 10744,
"suppose": 6662,
"dragged": 18640,
"nail": 16596,
"second": 684,
"define": 442,
"bugle": 11041,
"murderous": 20408,
"dialogue": 14211,
"hypocrisy": 20131,
"calf": 27176,
"screwing": 30823,
"Clutching": 32278,
"hood": 29744,
"Rook": 9800,
"goodness": 14345,
"usally": 29795,
"fairness": 11583,
"sharing": 5212,
"Claudio": 13225,
"dismembered": 20395,
"Sheltered": 31604,
"Martinis": 32703,
"overlooked": 10867,
"8.00": 10527,
"travelguides": 27405,
"closing-down": 31485,
"rearrange": 31684,
"gesturing": 32695,
"hug": 11090,
"https://www.nytimes.com/2017/04/16/technology/inside-the-hotel-industrys-plan-to-combat-airbnb.html": 15138,
"BEE": 11864,
"Cargo": 32538,
"Schema": 30114,
"motionless": 9672,
"Ras": 31895,
"Acupuncture": 29510,
"Grounds": 16326,
"obese": 8625,
"lagged": 16176,
"incompetence": 19908,
"alerted": 22709,
"Setoff": 23513,
"readability": 30139,
"protested": 18928,
"hoss": 22788,
"create": 3334,
"classical": 1106,
"utmost": 30447,
"smacks": 25051,
"arbitration": 23742,
"alternative": 1895,
"UAAR": 13253,
"he’s": 9767,
"1994": 3814,
"scallop": 29589,
"connotation": 18115,
"DEMANDS": 11938,
"Hambali's": 20676,
"cared": 26804,
"reinforcements": 9685,
"communication": 6882,
"bind": 14090,
"Cafes": 27330,
"provisions": 11570,
"flannel": 31074,
"exceed": 25159,
"Scarne": 10322,
"Cairo's": 20866,
"Japanese": 1734,
"Wildwood": 28837,
"OER": 14502,
"quoted": 10555,
"software": 1032,
"container": 6256,
"Thorell": 1576,
"Sit": 7133,
"eat-e": 31744,
"Merrist": 26118,
"Kennedy": 11140,
"Alberta": 22355,
"Auster": 30262,
"greasy": 29751,
"equips": 20463,
"unlikely": 2001,
"puffs": 29841,
"ev": 11485,
"giraffe": 26263,
"uprush": 31594,
"spent": 3651,
"Retiring": 5960,
"represented": 14247,
"balances": 22585,
"airwaves": 7925,
"Moor": 30442,
"distortions": 11296,
"dimensions": 2453,
"jury": 5529,
"Elinor": 729,
"independent": 4249,
"yowled": 32410,
"Mr.": 5270,
"diversification": 20973,
"philipinos": 27259,
"98011": 23180,
"Islamiah": 20725,
"RFI": 2716,
"a.k.a": 22085,
"Removes": 24068,
"SERVICES": 23438,
"garrison": 12590,
"smuggled": 19877,
"TRUST": 29272,
"mankind": 4002,
"concludes": 31535,
"recieve": 28141,
"Noble": 22102,
"Lost": 18216,
"necessities": 24673,
"beach": 9984,
"3/4": 17844,
"realy": 29608,
"villages": 16999,
"apple": 15827,
"Brings": 9362,
"G.": 6168,
"Could": 6098,
"08:27:46": 20269,
"irrigation": 17068,
"dictate": 17340,
"Levitt": 21763,
"Michigan's": 25010,
"inexhaustible": 30233,
"et": 252,
"Monday's": 21012,
"Fang": 3429,
"onesie": 28634,
"embarrassed": 18002,
"invitaion": 23189,
"Limerick": 26146,
"Soviet": 10397,
"leaky": 691,
"clarify": 7490,
"oppression": 10018,
"wordlessly": 14853,
"Ranasinghe": 19055,
"death-knell": 31451,
"Beautifully": 29063,
"harbor": 17157,
"Davidson": 6961,
"USAMRIID": 20660,
"cooperate": 14085,
"Whilst": 27666,
"microcosm": 3007,
"bullseye": 25778,
"risking": 8457,
"Charleston": 3582,
"plot": 3028,
"mistruth": 14337,
"failure": 7392,
"steppers": 6925,
"MIT": 10389,
"alcoholic": 13578,
"explains": 7209,
"fruit": 8241,
"Moriaty": 2532,
"litigation": 23781,
"prognosis": 24529,
"his": 272,
"pouring": 4004,
"Aafia": 20741,
"gaze": 21863,
"husbands": 21509,
"toasting": 30601,
"faltered": 18826,
"monthly": 11690,
"kosher-beef": 30574,
"Apache": 17052,
"businesses": 8094,
"header": 13090,
":-)": 21266,
"Oberst": 4423,
"Not": 6143,
"non-realism": 14939,
"monitor": 2563,
"inspired": 2839,
"insanity": 6875,
".2": 18036,
"Bailey": 13,
"footpaths": 30358,
"altered": 9258,
"continuously": 13547,
"strict": 4305,
"begged": 30609,
"humid": 9371,
"greyness": 9946,
"Canadians": 16447,
"Should": 6989,
"overplayed": 19354,
"13": 303,
"distinguish": 1204,
"committments": 22981,
"overtures": 18903,
"loudspeaker": 12869,
"22301": 24764,
"wud": 26220,
"although": 1190,
"misinform": 29183,
"MIND": 28493,
"seamen": 30969,
"fusions": 29071,
"experiance": 11790,
"hopping": 2940,
"buried": 4017,
"quoting": 12839,
"hillside": 31214,
"pencils": 16043,
"Campaign": 19824,
"Matthew": 4077,
"flattered": 32680,
"Indexed": 21441,
"watching": 6361,
"Disatisfied": 29315,
"dark-panelled": 32888,
"Poitiers": 5111,
"branch": 4276,
"shoe": 6390,
"dismissed": 8615,
"junkie": 28986,
"Kenyatta": 31805,
"http://www.antifraudcentre-centreantifraude.ca/english/home-eng.html": 27037,
"dolomite": 30632,
"Gentle": 28260,
"re-routed": 19903,
"vital": 11580,
"christchurch": 26964,
"drowned": 31104,
"Romans": 17525,
"Podcast": 5307,
"origination": 26518,
"Facebook": 12195,
"unused": 15121,
"head": 4581,
"author": 1016,
"Bridget's": 25343,
"Calcutta": 26437,
"SEATS": 29664,
"arrogantly": 25639,
"horsetail": 15935,
"Polo": 32699,
"tables": 13425,
"caveat": 2897,
"confluence": 20284,
"Inca": 15420,
"Rcommended": 28267,
"Detrick": 20692,
"ANDRILL": 10602,
"Trek": 13704,
"#ethos": 7823,
"tavern": 26698,
"7": 481,
"slumbered": 32374,
"artificially": 2263,
"intersected": 32756,
"outnumbered": 14781,
"investigations": 3264,
"merger": 20868,
"Macrocosm": 24048,
"GUESS": 24914,
"kenneth.lay@enron.com": 21796,
"Ye$": 26742,
"exhausted-looking": 31665,
"Shenzhou": 24784,
"Deutsched": 22064,
"domains": 2274,
"Navarro": 1070,
"Misha": 5858,
"heck": 15730,
"Israelis": 18872,
"last": 3903,
"cantons": 31674,
"parents": 1525,
"turned": 3367,
"weaker": 14666,
"every": 1855,
"Washington": 3512,
"invoked": 19183,
"consulates": 19641,
"Aloha": 7552,
"Sadly": 31392,
"ladies": 14552,
"1928": 3424,
"Being": 14921,
"seal": 18060,
"Ongoing": 14568,
"likely": 1279,
"Brumbley": 24962,
"SA": 8537,
"Pan": 12431,
"diver": 18243,
"BRADLEY": 22832,
"renew": 16468,
"hanks": 9148,
"Ave.": 17453,
"crude": 23402,
"MORE": 26430,
"Address": 14003,
"elves": 6438,
"Nat": 13363,
"System": 2266,
"Mohib": 12075,
"ear": 25957,
"constitution": 869,
"spend": 3839,
"Kenya": 14485,
"Armed": 18910,
"21,000": 19486,
"K": 20958,
"creepy": 20262,
"dunny": 32473,
"pipe": 3287,
"Hold": 15916,
"impressionist": 21150,
"elites": 827,
"Total": 23604,
"Abourezk": 11593,
"Section": 21943,
"ultraefficient": 30806,
"ornaments": 15332,
"Purpose": 25427,
"seething": 25755,
"comedians": 27504,
"Monaco": 22185,
"Let’s": 2478,
"toll": 12272,
"authority": 1251,
"Lol": 27651,
"feeds": 6681,
"promoting": 792,
"chains": 8105,
"died": 3490,
"appears": 1379,
"GRECO": 25366,
"objection": 27635,
"tariff": 22389,
"com": 28197,
"Giannini": 13224,
"Εὐσέβιος": 4963,
"arrives": 13061,
"curbing": 19683,
"virus": 13801,
"indiscriminately": 15513,
"retrial": 20811,
"contraction": 25143,
"cleric": 18473,
"co.": 29179,
"Plateau": 17409,
"may": 1066,
"potash": 30807,
"permanently": 5450,
"hijackers": 20723,
"Automotive": 29803,
"testosterone": 13611,
"excursions": 30370,
"launcher": 26176,
"tanks": 19134,
"bet": 6327,
"greys": 9043,
"impede": 11610,
"appendices": 22419,
"WARWICK": 29949,
"co-starred": 4221,
"credited": 10373,
"superficial": 5029,
"founder's": 24155,
"sulky": 31933,
"applied": 654,
"home": 2088,
"second-hand": 32328,
"fiction": 4627,
"efficient": 616,
"Andrea": 23203,
"hairdresser": 29097,
"freelance": 13798,
"unsweetened": 17857,
"shopwindow": 31659,
"prefers": 6622,
"knows": 9637,
"mid-20s": 19860,
"1967": 18901,
"Affairs": 22825,
"picketing": 23160,
"4.0": 7670,
"minor": 3530,
"Yak": 15429,
"path": 808,
"alternations": 9954,
"sheik": 20620,
"lineatus": 27852,
"图": 14869,
"scratchy": 27213,
"hips": 30258,
"overtaking": 31035,
"errands": 15008,
"Lattice": 954,
"Yang": 3395,
"Daisy": 9701,
"Namibia": 16487,
"overrun": 19544,
"Andreae": 10110,
"Principia": 3262,
"Steak": 20937,
"native": 2029,
"Stage": 23692,
"5.10": 29385,
"artifacts": 13300,
"shown": 394,
"5.5": 26026,
"livelihoods": 14538,
"Sydfynske": 17200,
"intractable": 19033,
"Nordic": 23257,
"Assault": 12601,
"slave": 14696,
"sniffing": 27688,
"these": 165,
"Len": 3792,
"NX1": 21281,
"Characters": 18096,
"sneakers": 16662,
"instructed": 20662,
"Kendrick": 12313,
"Irregularities": 24058,
"children": 1571,
"compounded": 22636,
"Priests": 19951,
"occur": 864,
"screamed": 11967,
"Bradford": 22056,
"r": 11489,
"subpoenas": 23665,
"1528": 25358,
".udl": 30054,
"visits": 12751,
"projectlondonmovie.com": 13759,
"Ribs": 28434,
"attacks": 12748,
"I’ll": 9785,
"evening": 6526,
"Addition": 27255,
"sensors": 13948,
"30,858": 26051,
"Economics": 698,
"Assessment": 25152,
"Caucus": 14132,
"indefensible": 31946,
"truths": 8443,
"judicial": 906,
"beat": 8962,
"SPICES": 27624,
"Ian": 4948,
"whatsoever": 7365,
"SE": 23242,
"father": 3162,
"exclude": 1901,
"nobody": 11209,
"ron.com": 22020,
"any": 602,
"slipped": 8965,
"genetics": 27135,
"targeted": 14128,
"Stutenberg": 2526,
"functions": 1457,
"NASTY": 28397,
"vapour": 8914,
"craft": 9358,
"patriot": 7943,
"correctness": 15176,
"winner": 12546,
"vehemently": 18927,
"mistook": 1294,
"Heights": 22531,
"DG": 23102,
"O'clock": 24147,
"ATE": 28564,
"mary": 28830,
"necklace": 32270,
"pop...@spinach.eat": 25723,
"indentured": 14692,
"personaly": 28180,
"stationed": 3674,
"Bill": 6666,
"ABBEY": 11899,
"consolidation": 23495,
"over": 277,
"gloating": 19378,
"Masters": 21840,
"statutory": 7223,
"#health": 8471,
"spores": 10303,
"feeder": 27753,
"Haifa": 30819,
"Hariri": 25823,
"persuading": 19688,
"tactic": 20440,
"adoptive": 14850,
"Porte": 2403,
"patience": 11197,
"assassinated": 18520,
"thinned": 2607,
"politician": 12481,
"Mahady": 14451,
"child’s": 7926,
"tombs": 30748,
"insurers": 23782,
"Bray": 31592,
"Eleanor": 4211,
"intend": 2370,
"Hawker": 21275,
"Maitra": 19509,
"KNOWS": 29773,
"associations": 1451,
"component": 11625,
"sensitivity": 2619,
"steps": 7577,
"575,000": 15679,
"touched": 8435,
"Prices": 15668,
"scatter": 8134,
"Alzheimer": 9518,
"handiwork": 9593,
"Jenna": 5174,
"DENISE": 8262,
"mandated": 24687,
"rebelling": 3543,
"remote": 2592,
"employers": 5269,
"ration": 19537,
"415.782.7822": 23322,
"darker": 8736,
"roughness": 2642,
"aquatic": 4492,
"helps": 6377,
"Haven": 19861,
"expropriation": 892,
"originate": 10736,
"Pop": 12524,
"deer": 10155,
"wiki": 10750,
"spying": 19745,
"Beardies": 26374,
"distortion": 15586,
"ranking": 12306,
"agreed": 2534,
"suspense": 6295,
"row": 9308,
"misery": 25717,
"Oz": 27667,
"Fitzsimons": 31487,
"Goodbye": 8596,
"freaky": 20173,
"dependance": 13569,
"Anne": 13648,
"becuse": 27964,
"exemplified": 2995,
"introduction": 5629,
"Tarsia": 25504,
"scaring": 23243,
"Presto": 22869,
"They": 1456,
"Moment": 16068,
"pursed": 31890,
"taxpayers'": 19121,
"Soviets": 24822,
"dialect": 3386,
"racket": 32848,
"Bending": 24101,
"610": 25349,
"rides": 6067,
"Criminal": 25997,
"Phyllis": 23526,
"dissertation": 3361,
"bow": 9080,
"1576": 25499,
"workers": 1301,
"fumes": 27301,
"Author": 25489,
"amused": 19284,
"forida": 26269,
"block": 12013,
"unsightly": 32715,
"Fran": 23750,
"panels": 26831,
"Urban": 16046,
"Stir": 17870,
"Efrem": 20880,
"fresco": 27108,
"flooding": 8152,
"simultaneously": 1544,
"metallic": 10044,
"reaffirms": 7431,
"Current": 21021,
"songwriter": 13343,
"early": 1105,
"begun": 9345,
"Frontier": 17113,
"Amin": 12165,
"golfers": 28316,
"santorum": 10479,
"veto": 12371,
"transmitted": 15018,
"Partially": 23044,
"warlord": 19707,
"towing": 28822,
"french": 28555,
"bacteriologist": 20740,
"Craig": 11739,
"dodgy": 32170,
"BEEN": 27478,
"austere": 18118,
"hullo": 11703,
"Galway": 32827,
"chamber": 10173,
"Medicine": 20728,
"Thur.": 22182,
"Belgians": 13107,
"paralyzed": 18239,
"shaped": 3601,
"Evangelicals": 26107,
"aftershocks": 26960,
"disagreed": 30013,
"confidence-building": 31353,
"misrepresentations": 14162,
"ubiquitousness": 8206,
"reasons": 1093,
"USA": 5613,
"aspen": 25055,
"leaned": 8548,
"IQA": 18337,
"URSULA": 22844,
"Modell's": 29431,
"declining": 7920,
"invaded": 20071,
"extravagant": 32808,
"repetitive": 13571,
"Skittled": 18415,
"Bruna": 1508,
"Feel": 18320,
"Waitangi": 12670,
"Thanx": 21277,
"extractive": 835,
"St.": 3206,
"shoer": 6410,
"Tradename": 23064,
"micron": 11336,
"pamphlet": 6530,
"rust": 16399,
"hernia": 24080,
"inventory": 8086,
"Record": 26091,
"tested": 2369,
"ventures": 5315,
"compound": 3238,
"drooped": 32028,
"UNLESS": 12318,
"reiterate": 22699,
"budgie": 26279,
"races": 6192,
"09/11/99": 23248,
"worship's": 25525,
"olympus": 26209,
"GREEN": 28575,
"mosquito": 28039,
"bacon": 32236,
"God": 5136,
"regain": 24362,
"friends": 3919,
"Mango": 8283,
"www.standfor.co.nz": 12660,
"washed": 597,
"calm": 9405,
"defectors": 12307,
"Evaluations": 22842,
"11/7/08": 28055,
"unacceptable": 14240,
"energy": 2087,
"Osage": 17504,
"Bruyne's": 13115,
"Polk's": 20235,
"viewpoints": 1273,
"550": 23871,
"expose": 18019,
"Conservatives": 31340,
"raw": 16925,
"Reception": 21785,
".........": 19475,
"receiver": 26727,
"sewage": 28858,
"archosaur": 2764,
"Shrugging": 30581,
"thaks": 28359,
"responsive": 14385,
"covering": 1075,
"1981": 3479,
"enemy": 3953,
"objectively": 15145,
"favoring": 10441,
"WAITRESS": 29678,
"circumcision": 30523,
"latter": 4138,
"serivce": 29577,
"Saturdays": 16103,
"92842": 24952,
"gross": 6830,
"cross-clause": 1156,
"2:30": 12523,
"throat": 6549,
"Theoretical": 699,
"magistrate": 31754,
"Elimination": 18665,
"GREEK": 11922,
"surveyed": 26019,
"expeditions": 4370,
"pregnant": 16148,
"dont": 20230,
"ld2d-#69377-1.XLS": 22436,
"valiant": 18580,
"scaling": 2807,
":(": 26252,
"www.norcalfightingalliance.com": 28547,
"few": 283,
"UTC": 29009,
"harbour": 16304,
"Philip": 20916,
"Branom": 21144,
"neighbourhood": 18570,
"widen": 7985,
"tragic": 24725,
"supervisory": 31367,
"convenient": 16551,
"Saddamites": 18602,
"group's": 19997,
"Technologically": 8253,
"ingredients": 10515,
"Sitara": 21401,
"borenste@haas.berkeley.edu": 22455,
"Oracle": 24198,
"Girls": 5703,
"Bruha": 24308,
"epic": 16093,
"calmest": 16180,
"chipped": 6864,
"distract": 8799,
"Azov": 4389,
"interaction": 190,
"2100": 2064,
"Spacecraft": 11312,
"aisle": 14159,
"bait": 15787,
"foundations": 16021,
"Indoor": 26803,
"landmines": 26010,
"epidemic": 8489,
"pool": 16848,
"inferiority": 25665,
"Wood": 22853,
"PPI": 20906,
"immutability": 30972,
"Chris.Germany@enron.com": 21532,
"Atheists": 13251,
"obeyed": 31246,
"industrialist": 4524,
"Suella": 13017,
"regard": 1989,
"ed": 19145,
"acne": 9587,
"Croucher": 13503,
"briskly": 30325,
"Japan's": 4612,
"bought": 6111,
"non-approved": 22503,
"c": 18109,
"36.2": 5259,
"Bridgeline": 23094,
"LISTEN": 29952,
"showered": 30240,
"ChangeCoordSys": 2305,
"reader": 1170,
"Bergère": 5421,
"PERSON": 29667,
"insistent": 32868,
"device": 2333,
"130": 11689,
"1.2": 15270,
"Anthropology": 14830,
"lemony": 17712,
"horn": 27060,
"Bladder": 27065,
"civilization": 13849,
"Lovely": 16246,
"baggy": 17681,
"knee": 2752,
"Koolhaas": 4554,
"demonstrated": 2594,
"ROWS": 30051,
"self-contained": 30260,
"Rest": 18729,
"1655": 4317,
"accents": 27662,
"Educational": 10840,
"Email": 18126,
"hunt": 20794,
"She’d": 8579,
"Friedman": 7849,
"859-7187": 22014,
"21st": 7815,
"camping": 17151,
"Sharayu": 28308,
"rate": 6031,
"Institutional": 697,
"generation's": 20081,
"meditate": 6527,
"ordering": 15880,
"Founded": 17032,
"attended": 3402,
"Distant": 942,
"plaintiffs": 7535,
"shoot": 12625,
"Component": 30077,
"issued": 1289,
"Gringotts": 32295,
"\"": 1108,
"compassion": 28063,
"ur": 26211,
"Absolute": 28549,
"Pixar": 13593,
"pub": 20164,
"rescheduled": 21007,
"onerous": 10979,
"smail": 24326,
"16.2": 26980,
"Iguaçu": 26997,
"about": 80,
"transit": 11629,
"Rude": 6748,
"abandonment": 8755,
"Mandil": 24586,
"hung": 9091,
"gauzy": 30923,
"objects": 1543,
"Obama’s": 10438,
"migrants": 12161,
"past": 498,
"measly": 11774,
"dangerous": 7708,
"parish": 4297,
"acquired": 5027,
"bankruptcy": 23635,
"Ajay": 27401,
"stock": 18379,
"inviting": 14478,
"inner": 18012,
"vingt": 4061,
"Ebola": 13838,
"Unique": 16311,
"lodging": 17141,
"Taiwanese": 18832,
"Seaboard": 25536,
"flea": 29335,
"Fresh": 17703,
"barking": 32639,
"incompetent": 20149,
"exchanged": 3586,
"Luther": 6519,
"California's": 22470,
"AMERICANS": 15305,
"attitudes": 8494,
"Graduate": 22666,
"vanilla": 17851,
"McNamara": 26947,
"messy": 21975,
"Caracas": 19374,
"Undeterred": 32545,
"contest": 3165,
"esp.": 29196,
"1,000": 7887,
"Work": 7903,
"PS3": 26778,
"505-625-8031": 23584,
"u": 3323,
"13.9": 21340,
"envied": 32519,
"diversity": 360,
"locomotory": 2733,
"Hunters": 30954,
"Ca-": 7149,
"Dando": 31742,
"co": 20198,
"gant": 28000,
"wonderfully": 20960,
"mouthed": 9804,
"MKM's": 22773,
"ones": 6417,
"devout": 20380,
"unde$tood": 26753,
"nonessential": 20910,
"pigeons": 32880,
"boosted": 24572,
"fakes": 17400,
"trainer": 27387,
"engineering": 3611,
"grudge": 3177,
"ensures": 16870,
"01/19/01": 21187,
"Tana.Jones@en": 22019,
"copyright": 7467,
"expects": 12921,
"rs": 27398,
"chock": 16405,
"devour": 7986,
"consulted": 23714,
"Episcopalian": 16542,
"Friedkin": 5356,
"beak": 17789,
"http://www.adorama.com/BLCBS.html": 26538,
"Cinematic": 3005,
"verge": 5975,
"Go": 7855,
"BPA": 12472,
"Winking": 14818,
"Ercot": 22849,
"IM": 7791,
"rental": 11621,
"Halliburton": 24376,
"notions": 733,
"incubating": 27860,
"Panera": 29440,
"GOT": 11939,
"unfold": 7287,
"listen": 9290,
"restaurants": 16512,
"Description": 21659,
"holdings": 23301,
"admiration": 9831,
"mugs": 31764,
"technology": 2321,
"Spread": 18138,
"Especially": 7761,
"Aberdeen": 4446,
"kept": 7617,
"impose": 17599,
"Ōtsugomori": 4731,
"assigned": 18275,
"Kathryn": 13297,
"Hoot's": 22075,
"Construction": 3748,
"colonials": 3544,
"alphabet": 31950,
"guilds": 24254,
"salmon-pink": 32114,
"kiosks": 32883,
"purchase": 11649,
"showing": 6408,
"Airbnb’s": 15115,
"366": 5013,
"envelopes": 8600,
"maddening": 32396,
"reasoned": 3084,
"belong": 4730,
"Slower": 9981,
"citation": 5095,
"Poor": 6947,
"evade": 18318,
"ancestral": 5438,
"counted": 10291,
"Frequent": 27063,
"ELectronics": 24177,
"colder": 15907,
"Hafs": 18619,
"crazier": 27806,
"nose": 6835,
"Innovation": 13970,
"VICTOR": 11847,
"envision": 22881,
"gained": 10549,
"gates": 27120,
"destiny": 5938,
"http://www.bullatomsci.org/issues/1993/s93/s93Marples.html": 18701,
"predestination": 6606,
"fishes": 27919,
"stall": 6781,
"Saints": 19987,
"immigeration": 27074,
"--------------------------------------------------": 26927,
"establishing": 3738,
"indicated": 2031,
"scoff": 25826,
"jerks": 29086,
"player": 1603,
"skilled": 13147,
"Cayman": 27494,
"gimmicky": 29646,
"Baron": 288,
"drinkers": 32668,
"permits": 1055,
"Objectives": 14989,
"899-4310": 22012,
"Ursula": 22831,
"broadcasts": 12870,
"rum": 6496,
"hysterical": 20396,
"firmament": 32411,
"acclaimed": 4164,
"overall": 1568,
"Resort": 17130,
"Moxon": 12314,
"EI.London": 22204,
"Aner": 11246,
"comfortable": 12050,
"principal": 4282,
"FABULOUS": 28797,
"c-": 6167,
"browse": 14863,
"Beliefs": 15181,
"fluid": 3117,
"Ālī": 16826,
"abusing": 19270,
"2:00": 22343,
"slots": 26382,
"JOB": 28070,
"Zhou": 3483,
"Godiva": 10524,
"built-in": 30094,
"grieving": 30790,
"4_28_00.doc": 23819,
"boulevards": 16741,
"underlying": 3124,
"menaces": 27535,
"blog": 7703,
"gangly": 28035,
"electrolyte": 27615,
"FUTURE": 1938,
"Nick": 7172,
"I'ile": 16631,
"boundary": 7626,
"hazardous": 18048,
"Advice": 26500,
"M.D.": 19091,
"botany": 3199,
"security": 7205,
"450": 17269,
"five": 1646,
"2015": 2426,
"hoists": 18814,
"Off": 9795,
"conceptualizing": 6588,
"Herzegovina": 16478,
"high-speed": 31401,
"stamps": 24920,
"Journey": 16098,
"*****": 24980,
"Between": 1150,
"dominos": 29937,
"conform": 15076,
"speculation": 3888,
"emits": 2191,
"suggestion": 7648,
"reflection": 2289,
"Likewise": 17123,
"origins": 3565,
"Village": 6154,
"Abuse": 19441,
"Chestney": 29719,
"student's": 1560,
"sundaes": 11479,
"she's": 6655,
"yawning": 31876,
"bony": 9145,
"Methodist": 23624,
"Kumon": 28508,
"desired": 17277,
"this's": 22329,
"breathe": 6261,
"dunno": 29642,
"Prominent": 19830,
"Levine": 23875,
"enables": 14542,
"Terrorists": 19875,
"Navarro’s": 1069,
"Resume": 22904,
"ebbed": 9443,
"humans": 14601,
"appreciation": 131,
"Brazillian": 12584,
"Grazie": 16123,
"noctivagant": 32378,
"Eastern": 4881,
"Baltimore": 14148,
"Of": 789,
"WASHINGTON": 18821,
"enacted": 24474,
"commercial": 1334,
"jury's": 19926,
"Enoch": 15179,
"St": 4438,
"liquefied": 25839,
"bisected": 32871,
"Fontainbleu": 22192,
"trademarks": 22495,
"680": 25992,
"hon": 6485,
"doorway": 32158,
"explore": 180,
"commence": 22655,
"gimp": 26617,
"owners": 10476,
"monday": 27086,
"Aren't": 20412,
"semantic": 1899,
"intelligibility": 5671,
"11831": 23176,
"necessity": 2082,
"submitted": 4011,
"whoooooo": 26300,
"Incredibly": 28121,
"Requiring": 11664,
"mirth": 25234,
"al.": 253,
"Ruse": 15148,
"stayed": 3902,
"COMp": 24151,
"alterations": 25144,
"machine-like": 30279,
"Month": 5457,
"equity": 20969,
"refrigerators": 17149,
"rigid": 12628,
"drowning": 17984,
"dark": 5058,
"Mechanism": 23299,
"Components": 30068,
"97th": 30363,
"Schwartzenburg@ENRON_DEVELOPMENT": 21727,
"intrigued": 13345,
"friends’": 9560,
"Ethiopia": 15519,
"eneedle": 26363,
"Expect": 18224,
"Atithi": 27422,
"Grit": 15217,
"conceding": 7640,
"beatingsup": 31780,
"Rgds": 22995,
"flop": 13686,
"thematic": 3712,
"processed": 15023,
"irish": 26308,
"proto-language": 18127,
"R.": 3789,
"trove": 17421,
"tome": 10981,
"seals": 25177,
"v-": 6634,
"Islands": 16252,
"WALKER": 24348,
"Paje": 991,
"remembers": 19821,
"speeds": 11397,
"west": 7384,
"Thrace": 5121,
"miserable": 19520,
"mesh": 18395,
"non-profit": 10778,
"eavesdrop": 17593,
"CDs": 11027,
"consisted": 1643,
"expresses": 11056,
"Barbuda": 16474,
"circled": 6983,
"tyranny": 30704,
"Maybe": 2824,
"inequality": 466,
"families": 5000,
"shorthand": 30132,
"Vomiting": 27070,
"Victim": 28366,
"tragedies": 11290,
"bin": 6942,
"infrastructure": 2423,
"missed": 13070,
"décor": 28147,
"pp": 24319,
"nautical": 30899,
"mount": 26720,
"Percy": 32181,
"Atef": 20659,
"shouldn’t": 7743,
"buttressed": 30667,
"contained": 5648,
"Grether": 22444,
"nests": 10216,
"snored": 31802,
"concentrate": 26199,
"Republics": 11597,
"skylight": 28500,
"ROMANCE": 10089,
"Grangers": 32330,
"companies’": 1333,
"query": 18831,
"Stand": 17931,
"Polaroid": 13317,
"greater": 367,
"tee": 27187,
"welcomed": 5946,
"Emperor": 4457,
"Fame": 5730,
"options": 8213,
"MWh": 22688,
"progression": 14520,
"03:15": 23329,
"Whole": 29202,
"lolling": 32733,
"sticking": 3300,
"RADISON": 29948,
"revocation": 22633,
"fled": 14231,
"1758": 3533,
"Beto": 5860,
"Spanish": 4,
"Donaldson": 26036,
"Wii": 26783,
"Cornelissen's": 31406,
"viewers": 2951,
"emeritus": 10371,
"unheeded": 9679,
"appellation": 20180,
"you’ve": 7755,
"teaching": 3412,
"Nimr": 19329,
"apothecary's": 32299,
"S&M": 10693,
"genuinely": 13653,
"sizing": 18722,
"declared": 3834,
"stilted": 21982,
"intervening": 7336,
"Singer": 24875,
"antiquated": 12762,
"Ipanema": 28644,
"besides": 1196,
"Solidarity": 24306,
"Mayur": 25324,
"volunteers": 10770,
"employment": 554,
"unpalatable": 15166,
"phylogenetic": 2888,
"Muni": 18998,
"Populaire": 5463,
"centuries": 1023,
"SHU": 28436,
"difference": 1683,
"spinal": 18240,
"What": 888,
"lipstick": 16000,
"poop": 27451,
"hauled": 9094,
"crustaceans": 25168,
"1894": 4714,
"SHOCKED": 29573,
"era": 928,
"Jiangsu": 3342,
"Clara": 958,
"Congressmen": 11546,
"realize": 1707,
"Comb": 27151,
"cartoons": 27912,
"childrens": 28413,
"starched": 32651,
"Edgewater": 16524,
"Chiefs": 21554,
"USB": 26312,
"lungs": 8858,
"chrisssake": 29116,
"altar": 5555,
"libido": 14954,
"Yucatan": 17008,
"fierce": 31094,
"surplus": 22768,
"elk": 25053,
"Prepare": 17724,
"'02": 23646,
"Texan": 25673,
"backpedalling": 21361,
"Waterfalls": 27002,
"Howard": 29462,
"----------------------------------------------------------------": 25419,
"formed": 5885,
"888-422-7132": 21387,
"Quimba": 29546,
"tombed": 30644,
"uncle": 3926,
"imperfections": 17621,
"evaluated": 316,
"personable": 29585,
"liability": 23429,
"yellow-pale-yellow-yellow": 32683,
"Nigeria": 14490,
"Hagghier": 17178,
"bees'": 28512,
"prevenient": 6584,
"belittle": 21330,
"edible": 28874,
"broke": 4373,
"Giovannini": 23452,
"businesslike": 11153,
"Balochistan": 19645,
"abnormal": 27596,
"counter-terrorism": 14271,
"small": 838,
"fair": 7421,
"Paragraph": 21621,
"Broken": 17463,
"strainer": 18369,
"Directions": 26910,
"DIRECTIONS": 1939,
"th-": 6177,
"loop": 15968,
"Chatham": 16251,
"scrap": 12973,
"718-780-0046": 21491,
"Locust": 29957,
"grin": 31207,
"Gala": 31586,
"Simmer": 18380,
"Locked": 32146,
"Lieutenant": 19835,
"seemed": 3846,
"greatest": 4392,
"01:04": 21338,
"Tijuana": 23076,
"jeff": 19973,
"Klain": 13836,
"annoyed": 15484,
"Frontpage": 3129,
"COwpland": 24157,
"control": 1661,
"Passive": 2652,
"brilliantly": 9974,
"EPM": 27993,
"classics": 5138,
"Murray": 5780,
"thresholds": 22209,
"Hubbard": 12300,
"twisting": 32293,
"solidarity": 18594,
"Inspector": 4216,
"skeptical": 5100,
"disguise": 25694,
"sunset": 17099,
"lording": 30312,
"Brieber": 249,
"contribution": 2704,
"market": 7989,
"plaza": 16964,
"HEATING": 28463,
"reluctantly": 19050,
"influence": 1533,
"contacts": 19412,
"Asking": 17970,
"comfyy": 26794,
"Arizona": 5612,
"cites": 7432,
"Luo": 3427,
"horse": 6191,
"nibble": 8967,
"self-pity": 30479,
"remaining": 9289,
"neurological": 28002,
"operandi": 8312,
"nine": 4682,
"Actually": 6694,
"YEAR": 11897,
"Site": 16781,
"Lucky": 29238,
"toward": 432,
"priory": 31574,
"itchy": 26504,
"forgiveness": 11576,
"RNR": 23737,
"Professor": 3463,
"3.30": 23128,
"Valentines": 29502,
"demise": 18246,
"recieved": 24502,
"unwatched": 32515,
"basic": 1535,
"léxico": 1135,
"excel": 22653,
"teh": 22719,
"Adriana": 25399,
"stylist": 29287,
"Luckily": 29725,
"coals": 6398,
"Developer": 22333,
"NMANNE@SusmanGodfrey.com": 23732,
"Check": 24242,
"Cimarron": 17446,
"algae": 26716,
"Correspondence": 5654,
"maturity": 8717,
"Late": 3475,
"roundtable": 24805,
"biased": 20968,
"recruitment": 594,
"Behari": 19147,
"KONG": 11805,
"elephant": 17197,
"Committees": 11585,
"termination": 22173,
"skulking": 31000,
"wrapping": 2318,
"refused": 3185,
"darkling": 9960,
"Blumenfeld": 22395,
"borrowings": 2032,
"urination": 27064,
"Race": 17551,
"loom": 25836,
"acrylic": 16002,
"conditons": 27044,
"veiled": 30974,
"betta": 26706,
"ruthless": 20543,
"tea": 6702,
"golden": 9562,
"upwards": 3337,
"bounces": 26799,
"stabros": 10083,
"POS": 29305,
"snowstorm": 25136,
"dedicated": 3451,
"distain": 28639,
"Wednesday": 5230,
"clang": 9707,
"Bruce": 12563,
"whoo-hoo": 15981,
"wine": 9191,
"RAW": 19646,
"Exocet": 25801,
"Eulogic": 28581,
"Smyth": 8595,
"instructing": 31775,
"Tsarevna": 4378,
"pabloruizfabo@gmail.com": 953,
"Festus's": 31801,
"locust": 29956,
"Cottage": 5814,
"Raina's": 28506,
"bad": 1386,
"flatbread": 9184,
"8000": 12187,
"alt.consumers": 25724,
"attracts": 28958,
"Next": 675,
"dope": 20094,
"marketplace": 16890,
"MAILING": 24934,
"Burma": 31532,
"THIS": 11838,
"Senator": 10487,
"revelations": 8749,
"Guests": 16318,
"40": 1665,
"biases": 2711,
"Evelyn": 4120,
"Mohieddin": 30681,
"emigration": 16935,
"evaluate": 24711,
"knees": 6862,
"Anatole": 5423,
"weirdness": 20296,
"Nasser": 30660,
"Exactly": 31755,
"Kraków": 16933,
"red-headed": 32217,
",,": 27364,
"telescope": 14610,
"abdomen": 4022,
"½": 3321,
"LEARNING": 15067,
"Desiring": 32667,
"detained": 20764,
"inserted": 22227,
"scowl": 9322,
"worsening": 24398,
"francisco.pinto.leite@enron.com": 22298,
"relevance": 82,
"Needs": 21854,
"shine": 14622,
"comply": 7411,
"wedged": 31697,
"roaming": 25042,
"Roland": 31910,
"pricey": 27546,
"concepts": 734,
"Allawi's": 19257,
"aren't": 10332,
"hh": 26977,
"intersect": 17484,
"dig": 17744,
"visual": 158,
"oracional": 1157,
"unwieldy": 13042,
"glimpse": 13380,
"1662": 16817,
"luna": 29710,
"declivity": 31163,
"spacetime": 15540,
"left-over": 31771,
"VERIFIES": 24975,
"Incorporated": 23050,
"I’ve": 7720,
"understandably": 23058,
"Walked": 5377,
"nerve": 20850,
"Lavorato": 21014,
"flowing": 21425,
"vile": 9486,
"comet": 9958,
"Fyi": 22482,
"Bonde": 11686,
"Starbucks": 13597,
"Nesbitt": 21567,
"Hizbullah": 18892,
"panting": 30826,
"comics": 12532,
"wise": 10321,
"Woodinville": 29134,
"goofy": 20822,
"pyramids": 15324,
"bearers": 30956,
"Conseguences": 18666,
"boundless": 32800,
"Slope": 7880,
"enterprises": 11604,
"Puerto": 16635,
"scholarly": 433,
"cafe": 10992,
"Paulo": 23196,
"skyrocketing": 23712,
"slowing": 9977,
"Sounds": 21742,
"Fayetteville": 13378,
"framed": 3090,
"Joachim": 27116,
"allowed": 2848,
"governing": 5691,
"rocks": 8998,
"Samoa": 26014,
"spikes": 23337,
"Drama": 4188,
"barrister": 13030,
"Visitors": 16424,
"tour": 2964,
"uncompleted": 18084,
"SERIOUSLY": 27358,
"1:1:19": 1816,
"Appeal": 18211,
"mah": 9134,
"conceivable": 26802,
"guitars": 32417,
"UK's": 4475,
"Birdie": 11097,
"03:31": 22819,
"files": 15024,
"Daimler": 23847,
"ruinin'": 32300,
"Vij": 19075,
"ENRONR~1.DOC": 23441,
"wooden": 8957,
"apology": 30354,
"Project": 12646,
"Gérald": 13015,
"Conf": 22973,
"competed": 8417,
"conquering": 9463,
"concerns": 2450,
"Sanzio": 25338,
"landmine": 8647,
"!!!!!!": 24991,
"dialects": 1786,
"piece": 4001,
"taxi-driver": 32635,
"Trump's": 12071,
"augmentations": 8389,
"dialog": 30194,
"Acquired": 14827,
"suit": 12568,
"sedentary": 30970,
"$2,000": 11569,
"castling": 25480,
"UCSB": 7142,
"overarching": 15325,
"perspectives": 387,
"Cheap": 16717,
"Yassin": 18929,
"Lorenzo": 27110,
"workspace": 30084,
"negligence": 7412,
"cross-border": 31471,
"Fridays": 20070,
"sponge-bag": 31693,
"elses": 21974,
"embedding": 3696,
"actresses": 5386,
"http://www.ontario.ca/en/information_bundle/birthcertificates/119274.html": 27473,
"keenly": 19048,
"Haddo": 4277,
"seller": 3723,
"Rochester": 5200,
"tugging": 8840,
"Settlers": 14686,
"tied": 8981,
"fodder": 8207,
"Handwritten": 20623,
"cyanide": 20849,
"advantage": 1259,
"tiring": 15874,
"stash": 18176,
"Beirut": 4550,
"filipinos": 26140,
"Blvd.": 23888,
"Willis": 29846,
"unconsumables": 25178,
"substrate": 26885,
"enchanting": 14916,
"Evil-looking": 32243,
"06:15": 22157,
"website’s": 12733,
"barges": 17252,
"Prejudice": 10931,
"1380": 17306,
"airline": 16456,
"terrent": 5081,
"Tikrit": 18523,
"Maati": 20775,
"wants": 8801,
"billiards": 25509,
"searched": 30510,
"Does": 6794,
"Coil's": 20224,
"anti-democratic": 20498,
"signifies": 16145,
"jungle": 12000,
"baleful": 9388,
"autograph": 11026,
"AWOL": 19226,
"taxed": 25750,
"Sabine": 14721,
"raced": 31820,
"charges": 3982,
"correspondences": 5684,
"officers": 3600,
"bendings": 9417,
"stimulating": 758,
"adhering": 22109,
"55": 17206,
"Fountain": 17053,
"Assassinate": 18745,
"brothers": 3153,
"already": 2301,
"joined": 3815,
"mares": 27978,
"Producer": 20926,
"protective": 17639,
"torturing": 24271,
"comparisons": 10628,
"lacerating": 30478,
"til": 11069,
"Announce": 17934,
"hamper": 2645,
"evolves": 20095,
"conflagration": 23971,
"rectangle": 9849,
"Congratulations": 17959,
"neighborhood": 4687,
"SUITABLE": 11930,
"Nhut": 19195,
"generic": 2367,
"VOF": 21139,
"PROCESS": 28188,
"identifies": 1036,
"helicopters": 11205,
"Process": 23113,
"wet": 6248,
"Bourret": 24954,
"vol.": 14908,
"SCLED": 2107,
"XIII": 21944,
"proof": 2282,
"clicked": 22551,
"Chevy": 6933,
"stuff": 6084,
"overrides": 31335,
"darkened": 24881,
"ghetto": 30797,
"Beginner": 8330,
"reused": 16972,
"Unit": 23025,
"corrugated": 10046,
"EVERYBODY": 11908,
"Hizb": 19679,
"polka": 32553,
"apparently": 5979,
"catering": 27328,
"democrat": 12432,
"peers": 392,
"skull": 27355,
"SiriusXM": 5326,
"1896": 3305,
"rubber": 7338,
"whale’s": 9086,
"jihadis": 19110,
"thinks": 8170,
"cufflinks": 31900,
"torsional": 2817,
"47": 22767,
"Moses": 30537,
"pains": 14025,
"3s": 18743,
"compete": 8404,
"stairs": 8953,
"guerilla": 24314,
"passed": 9083,
"matters": 8352,
"DAD": 21531,
"reputations": 1492,
"caustic": 17999,
"Numero": 24771,
"jar": 27873,
"Own": 27962,
"51": 17462,
"request": 3603,
"Marine": 10439,
"wiser": 25310,
"psychedelic": 6839,
"expertise": 1224,
"ministries": 13930,
"Approvals": 22036,
"Kori": 22098,
"Khan@TRANSREDES": 22910,
"ruin": 26815,
"chrome": 26953,
"Feeling": 32283,
"1575": 25495,
"Eventually": 4649,
"magistrates": 31758,
"mound": 32015,
"skinny": 32054,
"Homer": 1101,
"tricks": 10318,
"hulk": 31940,
"revise": 22286,
"ya": 11705,
"punished": 32913,
"Claimed": 28562,
"icicles": 32522,
"Entrance": 16701,
"sacred": 14322,
"absorbing": 24628,
"Edgar": 18479,
"quad": 27567,
"Anyway": 9906,
"revealing": 15197,
"Edison": 15251,
"Sufaat's": 20719,
"Law": 7275,
"summary": 567,
"WARNOCK": 14353,
"monarchies": 24369,
"wai'd": 17345,
"misc.consumers.frugal-living": 25726,
"smiled": 9787,
"Liberty": 4093,
"interfering": 11618,
"DAUGHTERS": 29685,
"realer": 15735,
"sociologist": 15450,
"jazz": 17932,
"manipulated": 1474,
"purportedly": 20247,
"appreciative": 32706,
"sunshield": 14618,
"Paniotis's": 32885,
"warm": 6477,
"Burckhardt": 27099,
"Biewener's": 2771,
"Marvel": 3004,
"Audit": 21945,
"friend's": 9612,
"resignation": 5592,
"Alabama": 15041,
"lust": 9832,
"Others": 20635,
"grab": 8839,
"exper-": 6907,
"Beth": 6708,
"hole": 6331,
"dearly": 32094,
"exclamation": 14834,
"Hamburger": 6953,
"pleadings": 23825,
"owner's": 16904,
"complete": 522,
"woodland": 15289,
"Equilon's": 23408,
"Password": 22982,
"Bridge's": 16503,
"Carribbean": 26579,
"Curious": 30539,
"Someone": 12727,
"monastic": 5916,
"showgirl": 5398,
"stonework": 16971,
"harmful": 2097,
"of": 17,
"desire": 5151,
"Snyder": 22308,
"Merry": 8690,
"impotent": 31144,
"vaunted": 25815,
"survived": 9119,
"checkerspot": 25130,
"vertically": 2621,
"equivalence": 5552,
"waiver": 20806,
"serpent": 15355,
"angry": 8960,
"inverted": 19938,
"stealing": 15164,
"misstated": 22597,
"handfuls": 32326,
"75th": 15637,
"rejoice": 14052,
"somberness": 31113,
"Wedding": 2920,
"Nobody": 19658,
"functionalism": 14928,
"subtlety": 14887,
"ocean": 2556,
"1925": 3411,
"Lou": 22761,
"mid-ocean": 30783,
"translucent": 9737,
"thought": 2495,
"Knights": 20812,
"Aberdeenshire": 4263,
"rigger": 18230,
"quidditch": 18333,
"adaptations": 10206,
"22:30": 12520,
"conditionting": 17147,
"ballot": 12522,
"Hamilton": 3627,
"not": 232,
"da": 2241,
"asexually": 10671,
"Adnan": 20773,
"Molten": 27297,
"EAT": 28798,
"brides": 30007,
"eccentricity": 32749,
"single": 474,
"Roberts": 7128,
"bird": 2757,
"TOWNIES": 11855,
"rebel": 19023,
"modified": 11395,
"prostitute": 24297,
"reptile": 26884,
"Increasingly": 24584,
"onboard": 11374,
"lapping": 8955,
"Quinoa": 18351,
"willows": 25070,
"wand": 16092,
"reportedly": 12144,
"Sinners": 5395,
"Muslims": 12072,
"Merlot": 16240,
"gardening": 22641,
"Gosier": 16660,
"hackles": 20315,
"changes": 646,
"501st": 12591,
"visitors": 10763,
"Alternatively": 17569,
"Werner": 5513,
"ago": 6045,
"industry’s": 15103,
"mold": 17757,
"painting": 4591,
"crystallizes": 21762,
"sums": 25847,
"disembarking": 31718,
"gened": 32611,
"tamed": 27783,
"ebay": 26875,
"producer": 5328,
"graves": 4075,
"Agel": 23982,
"Baghdad": 4516,
"distributing": 7906,
"contain": 2096,
"2.11": 15658,
"combining": 13335,
"analyzed": 737,
"Med": 16672,
"bureaucratically": 20606,
"Isn’t": 11212,
"35,000": 20733,
"burning": 7358,
"getting": 4923,
"tasked": 12820,
"vested": 12832,
"Trading": 21574,
"expect": 1427,
"deterrent": 10433,
"80s": 5415,
"COS": 23311,
"notification": 23594,
"unstained": 30922,
"irrelevant": 7428,
"Somalia": 18638,
"punches": 24141,
"pleasantly": 28635,
"smelling": 15830,
"Hamburg": 4319,
"Spang’s": 1197,
"Katherine": 5416,
"wouldn’t": 7688,
"NEEDED": 24342,
"Benzie": 8237,
"Dems’": 19210,
"Spirit": 17111,
"launchers": 19598,
"underestimate": 20632,
"Pigeons": 32939,
"prosthetic": 8406,
"Ombre": 5528,
"2017": 688,
"counter-conference": 10393,
"situated": 14849,
"penn": 18099,
"solemnly": 32488,
"delegate": 24804,
"there’s": 7740,
"Errol's": 32180,
"pudding": 31773,
"Customers": 15117,
"sirloin": 29395,
"quaffle": 18293,
"astronomer": 32568,
"70": 11678,
"dislocate": 18198,
"fizzle": 10471,
"wisdom": 7237,
"Alexander": 3626,
"Everyone": 8770,
"forbidding": 20557,
"submerged": 24419,
"sheet": 15600,
"95": 12975,
"confirmation": 23052,
"387,000": 15676,
"likley": 23907,
"civilizations": 15267,
"Sun.": 22188,
"judgment": 6600,
"Scotland": 4264,
"anasthesia": 7063,
"Court": 7413,
"Choose": 17706,
"winging": 32901,
"sublime": 14892,
"Fabio": 20160,
"CE": 15367,
"inclusive": 780,
"replication": 2380,
"drawn": 2339,
"lap": 18085,
"sleeves": 17360,
"crippled": 25671,
"Carytown": 29446,
"Republicans": 14435,
"caves": 10004,
"Anderson": 12636,
"Servings": 17838,
"mink": 32421,
"11:57": 23431,
"Keepers": 18304,
"Paraíso": 1005,
"sneaks": 27283,
"cancel": 21193,
"1940": 3442,
"African": 8399,
"personalized": 28163,
"unconstrained": 32737,
"nudes": 26547,
"derivatives": 22510,
"Using": 2172,
"http://www.disinfo.com/archive/pages/dossier/id334/pg1/": 19424,
"claque": 32696,
"SoCal's": 23657,
"sneeze": 9862,
"spaghetti": 17364,
"11:08": 21360,
"‘cuz": 11694,
"icon": 20444,
"downtrodden": 24269,
"Theodorus’": 5931,
"Comfort": 28165,
"lock": 7390,
"bone": 2798,
"laid": 6517,
"Dumbledore": 32247,
"Made": 6859,
"Airways": 17117,
"Brighton": 5201,
"What's": 6665,
"Maharishi": 24184,
"aspire": 27845,
"scholars": 1064,
"blinks": 14804,
"prizes": 24548,
"confusing": 22201,
"Abdel": 20621,
"verdict": 12675,
"featured": 5244,
"Morocco": 12132,
"SoCal": 23613,
"activity": 832,
"Dobby": 32126,
"dept": 23169,
"disarm": 19043,
"generalizability": 516,
"living": 3509,
"Sapulpa": 17494,
"bake": 6457,
"pry": 17974,
"braver": 9662,
"Forensic": 5718,
"jail": 20841,
"3.75": 29593,
"Kazimir": 4595,
"Khinssa": 18088,
"derailing": 18886,
"fence": 29962,
"complication": 18075,
"newborn": 26320,
"mustache": 6173,
"longitudinal": 8498,
"cool": 8822,
"GUARDS": 11850,
"Debbie's": 7344,
"graduating": 5564,
"Roomers": 11782,
"16/10/2004": 19756,
"Sandalwood": 21843,
"Sympathy": 25620,
"included": 1947,
"vs.": 5277,
"dubbed": 12701,
"Tiberias": 11250,
"Ordinarily": 19847,
"211": 17530,
"summarised": 22650,
"exercising": 2844,
"hm": 7090,
"elapsed": 15607,
"smuggle": 19387,
"re-record": 10954,
"knacks": 8065,
"Ramtanu": 19508,
"supplied": 24368,
"diner": 29770,
"injection": 9540,
"captions": 30086,
"missing": 5825,
"Oh-ho": 6928,
"17H": 21123,
"Bro": 21883,
"lasting": 7938,
"info.": 22720,
"cylinders": 27312,
"Brandee": 23109,
"predominated": 32860,
"ecological": 16998,
"daring": 8918,
"Amanda": 14308,
"lots": 6160,
"recalled": 4574,
"Drinks": 16702,
"caloy": 26137,
"affronted": 30566,
"ignorant": 14700,
"Tommy": 16355,
"potato": 28875,
"LED": 2051,
"tongue": 18105,
"BTW": 27583,
"appointed": 4350,
"ever": 4564,
"Balochi": 19644,
"defanged": 18782,
"HIV": 1399,
"tailor": 18322,
"HollyŁódź": 16946,
"regards": 14941,
"doorstep": 15962,
"Florence": 17482,
"Fighting": 5866,
"4193": 22246,
"02/27/2001": 21617,
"ground": 2183,
"disjoint": 489,
"06:07": 21657,
"27.doc": 23310,
"Mini": 29729,
"roomful": 29932,
"Fifth": 7360,
"Haishen": 24790,
"unhealthy": 27225,
"1976": 3720,
"arm": 7100,
"Beach": 17226,
"hotpot": 29115,
"casing": 20600,
"touted": 8126,
"leaflets": 20168,
"slobber": 6828,
"Brian": 12961,
"reacted": 3868,
"functionality": 22635,
"galleries": 6164,
"is": 55,
"drop-down": 30150,
"whoever": 11214,
"honking": 30824,
"CVTS": 29915,
"ld2d-#69381-1.DOC": 22437,
"Mob": 32461,
"Nazi": 16915,
"Funen": 17202,
"mausoleum": 9105,
"pcs": 28072,
"beared": 23683,
"Inn": 23369,
"school": 1558,
"meters": 15594,
"arbitrators": 23739,
"regularity": 21332,
"antiseptic": 9533,
"Daly": 10588,
"whitened": 31843,
"afterward": 17816,
"Lawyers": 24264,
"twigs": 30360,
"rehabilitate": 25033,
"giraffes": 26261,
"giggled": 28719,
"dish": 18405,
"nourishing": 27865,
"wolves": 25021,
"drugs": 14651,
"whore": 6621,
"creation": 779,
"mouthpiece": 24565,
"booklist": 32347,
"Legion": 12592,
"porch": 8917,
"anywere": 28358,
"Forester": 5737,
"ex-cons": 24275,
"gelatin": 13281,
"Hormuz": 25787,
"GoogleScholar": 451,
"picturesque": 16339,
"luminol": 18038,
"expected": 1309,
"ICU": 21681,
"Cohen": 2489,
"delights": 7714,
"http://www.wikihow.com/wikiHow:Statistics": 10827,
"GUYS": 28071,
"Waters": 4736,
"23rd": 22619,
"gambling": 13546,
"LibriVox": 10905,
"Hacienda": 29166,
"deposed": 32677,
"Galantino": 13239,
"chemist": 5202,
"tiles": 9033,
"58,825": 12440,
"scheduling": 21560,
"twenty-five": 30580,
"Citation": 10385,
"Up": 4710,
"Wendy": 23139,
"Canever": 29373,
"DAYS": 10092,
"Korean": 12841,
"wreathed": 25560,
"graffitied": 32938,
"Fantoni": 262,
"Military": 3545,
"2007": 1549,
"rearview": 32930,
"wishes": 9913,
"abolished": 14758,
"skin": 2200,
"Bought": 12042,
"Crest": 27150,
"wikiLove": 10791,
"li": 14883,
"recessive": 27141,
"skittish": 27433,
"operators": 2253,
"Nullvalues": 30161,
"Neo": 12445,
"interest": 853,
"SUPER": 28744,
"universe": 7946,
"remains": 412,
"assertion": 3966,
"Pittsburgh": 4782,
"ABB": 21736,
"taunts": 9598,
"Spaghetti": 28299,
"Wilson": 6668,
"\"\"": 22053,
"1.50": 29975,
"Regulatory": 23687,
"advertised": 27668,
"structurally": 1839,
"http://www.mikegigi.com/techspec.htm#SELCTEMP": 27315,
"University's": 4495,
"crimson": 30839,
"Toys": 6966,
"provision": 11624,
"libertarian": 26069,
"Strike": 25810,
"repeat": 11232,
"bozos": 20174,
"suffices": 30978,
"bay": 20236,
"bicycle": 16579,
"some": 544,
"isn't": 6404,
".!": 27091,
"Colorful": 12922,
"crisp": 16143,
"land": 2353,
"Tots": 28133,
"extrudes": 30544,
"Wouldn't": 20410,
"burrowed": 24301,
"Pat": 16005,
"editorial": 11110,
"spoil": 28414,
"enthusiastically": 25257,
"streamline": 12974,
"Stock": 21851,
"husband's": 25653,
"No-8": 31540,
"least": 1380,
"lethargy": 24069,
"loudly": 17923,
"03/10/2000": 22570,
"Trophy": 4854,
"empowering": 10794,
"107th": 30294,
"lasciviousness": 25712,
"heartbreaking": 28026,
"aggregation": 23295,
"Play": 4705,
"CNRS": 956,
"Jim": 5410,
"dedication": 10861,
"Beachcrofts": 23787,
"Hephaestus": 32412,
"operative": 8293,
"Ip": 12452,
"281-443-3744": 22931,
"Spot": 11974,
"anatomical": 10665,
"increase": 1954,
"interpretations": 988,
"Contracts": 22518,
"Hurricane": 24392,
"0000108806": 22921,
"attaining": 6586,
"outraged": 31193,
"1907": 17491,
"viscosity": 32870,
"Nordstrom": 29150,
"physical": 216,
"delays": 11422,
"Alone": 3766,
"enrongss.xls": 21423,
"appearance": 2017,
"sympathised": 32644,
"uncontrolled": 9583,
"wedding": 3401,
"venality": 4344,
"Petroleum": 21790,
"sympathetic": 19696,
"uncomfortably": 30752,
"WITH": 21522,
"major": 2147,
"Bootham": 17581,
"Yellow": 2721,
"career": 4515,
"CONFIRMIT": 21371,
"Within": 1139,
"330": 2481,
"@POTUS": 12235,
"08:00": 17021,
"Avenue": 15562,
"38": 14888,
"Participants": 23276,
"‘’": 19649,
"pho": 29029,
"historicism": 14930,
"lung": 25954,
"affect": 66,
"Bridge": 13158,
"accomodating": 28280,
"unprofessional": 29085,
"slightly": 9511,
"blazed": 32104,
"access": 638,
"questions": 577,
"combative": 29069,
"statute": 7284,
"originated": 926,
"finger": 9878,
"Chorus": 13767,
"subcontinent": 18838,
"I/S": 21120,
"receptions": 31844,
"Figuratively": 20484,
"allocate": 21612,
"solve": 1890,
"Murph": 19804,
"teenage": 8741,
"dancing": 5223,
"wizarding": 18285,
"feathering": 17820,
"seed": 15920,
"Center's": 20013,
"1936": 5563,
"Lennon": 25596,
"savage": 31084,
"blade": 11368,
"Pandorans": 9300,
"trick": 9886,
"nauseous": 16174,
"Jazz": 29292,
"Fully": 14264,
"happiest": 11950,
"Santa’s": 8565,
"validate": 23853,
"concentrating": 24603,
"couples": 24652,
"handy": 21222,
"undertake": 25745,
"saponins": 18371,
"GEM": 28919,
"jacks": 26532,
"neo-conservatives": 19742,
"roam": 16843,
"uneven": 28327,
"Yvette": 12992,
"Clearwater": 12816,
"largest": 518,
"Orleans": 24394,
"Guv": 32369,
"Afternoon": 21629,
"Dulaymi": 19334,
"Evanston": 13327,
"sociology": 15478,
"responders": 14153,
"CAME": 29676,
"Champion": 5522,
"interspersed": 206,
"embers": 31306,
"don't": 6056,
"COMCAST": 29763,
"Geno's": 29961,
"Tanganyika": 31855,
"extensions": 12982,
"hardly": 1431,
"improving": 1534,
"Lipstick": 16020,
"Flakes": 27843,
"keys": 6453,
"mailto:rosario.gonzales@compaq.com": 22154,
"various": 358,
"pack": 8230,
"Motoko": 8258,
"prosperous": 809,
"batted": 4789,
"Questar's": 23580,
"braid": 15940,
"Commissioner": 12996,
"suggesting": 1765,
"missionary's": 31961,
"reptiles": 27742,
"Catarin": 1507,
"Uno": 21970,
"outlets": 8072,
"IAEA": 18676,
"Border": 12956,
"Kumaratunga's": 18997,
"Aye": 24229,
"ruins": 6083,
"sake": 8693,
"Covid": 13808,
"Wakare": 4737,
"omnibus": 21651,
"Consciousness": 24049,
"testified": 13731,
"ADDRESS": 29954,
"punctual": 28946,
"formally": 8318,
"presid...@whitehouse.gov": 24390,
"outsider": 31597,
"drunker": 32458,
"exponential": 32775,
"Para13": 22313,
"Argentina": 924,
"pets": 25094,
"printed": 4443,
"-FINAL.doc": 21503,
"fairway": 30965,
"streets": 9158,
"70's": 27265,
"Sasquatch": 25023,
"nets": 9441,
"choramine": 27869,
"poorest": 20420,
"reveals": 1698,
"harsh": 8245,
"graveyard": 9223,
"backwards": 9003,
"characteristics": 328,
"naughty": 8617,
"tales": 9924,
"hurry": 11408,
"ethicities": 27263,
"re-purpose": 14546,
"seclusion": 27924,
"circumscribed": 30329,
"buses": 16521,
"3,800": 2414,
"Cuz": 16029,
"monk": 5941,
"persuade": 12765,
"soy": 17843,
"attainment": 15236,
"Lawrence": 10915,
"residence": 16840,
"immortalized": 5293,
"Gerald": 5708,
"subdomains": 2505,
"ate": 8750,
"Porch": 21078,
"Useful": 26384,
"Arthur's": 10949,
"speculated": 3967,
"Issues": 29403,
"Older": 8464,
"Hegelian": 14915,
"Behavioral": 3656,
"prolific": 5414,
"fake": 1339,
"Egyptian": 20290,
"Reviews": 2375,
"unenlightened": 32915,
"Show": 30030,
"processor": 7685,
"deck": 8811,
"alignment": 14534,
"Tools": 30195,
"raiser": 24526,
"oral": 31407,
"insane": 10723,
"Islamists": 19296,
"collapsible": 30342,
"constructivist": 3071,
"Emotion": 15020,
"translations": 5663,
"Albert": 6054,
"dislike": 9538,
"Knitters": 7763,
"mimicked": 10566,
"dough": 21903,
"unfaithful": 14397,
"earth": 5053,
"3,000": 7888,
"Small": 19979,
"consequences": 828,
"Deco": 17417,
"illwill": 14039,
"unexercised": 20993,
"populace": 30670,
"Paine’s": 7970,
"testament": 3991,
"BROWNING": 11796,
"Odense": 17240,
"inquisitive": 19361,
"Denton": 23539,
"ah": 6309,
"4861": 23073,
"SMSU": 21743,
"Dutchman": 11426,
"reapply": 26465,
"dare": 10141,
"reschedule": 23215,
"Cultural": 15423,
"IPA": 29348,
"1851": 4439,
"Aid": 13424,
"sheesh": 27769,
"D7000": 27163,
"opener": 19960,
"timeframes": 22229,
"Examples": 15597,
"Fisher": 14553,
"centrally": 27424,
"dealship": 28853,
"lettuce": 27438,
"ominously": 30966,
"persistently": 25004,
"protect": 795,
"milks": 26895,
"expertly": 28921,
"lamb": 29991,
"haven": 8944,
"Historic": 16324,
"implemented": 815,
"Hayek": 7847,
"fail": 11266,
"grief": 8712,
"shredded": 9848,
"Flora": 17219,
"Charm": 32209,
"McCartney": 25644,
"wash": 9084,
"convulsed": 25707,
"ipsa": 5079,
"Delightful": 28984,
"stirs": 31013,
"Williamson": 728,
"ans": 4062,
"verbally": 2010,
"cracking": 9031,
"representations": 183,
"fantasy": 4194,
"currant": 16229,
"1.1": 15265,
"programs": 15124,
"Election": 12377,
"cocked": 25887,
"Salinity": 2548,
"Jacques": 9224,
"volunteered": 23454,
"Gapinski": 20974,
"spells": 32184,
"finance": 4536,
"1355": 16586,
"gesticulating": 30521,
"leaps": 7800,
"PLUS": 29561,
"328": 5947,
"excluded": 18546,
"fingered": 23352,
"Kreyol": 16696,
"saviour": 26108,
"unquantified": 32590,
"Atwood": 12540,
"commandment": 32731,
"reconciliation": 3176,
"arrange": 17278,
"parallel": 655,
"marine": 2549,
"3.1": 5186,
"possessed": 3388,
"Ahmad": 18547,
"Shawna": 23359,
"observers": 18537,
"Phet": 29801,
"cries": 27699,
"marry": 20000,
"devils": 31213,
"Coruña": 2242,
"speculator": 14787,
"tempers": 22781,
"circulated": 21327,
"terrorists": 11189,
"procrastination": 18250,
"supportive": 396,
"Ukrops": 29249,
"Experiment": 17905,
"businessmen": 11531,
"Declaration": 13887,
"clink": 31186,
"passing": 3312,
"90s": 19894,
"counter": 6333,
"acquittal": 3962,
"Hmm": 6460,
"arc": 15551,
"Ličen": 10834,
"Lemon": 6710,
"201": 16558,
"Winning": 11065,
"blinked": 19927,
"enamel": 32447,
"positing": 17688,
"investigación": 2239,
"undisputed": 20398,
"rudely": 28671,
"feature": 850,
"interrogated": 12288,
"02:42": 22744,
"currency": 8629,
"uncut": 27844,
"Speed": 17321,
"411507": 21389,
"reduce": 13049,
"Serve": 18387,
"Cluster": 23040,
"awkwardly": 31692,
"typos": 26462,
"Flourish": 32340,
"colleges": 15647,
"mooring": 32777,
"mimic": 1236,
"watering": 8979,
"Larry": 10960,
"equine": 26120,
"Janell": 23587,
"THAT'S": 24992,
"resigned": 12448,
"crusader": 20664,
"Casinos": 24428,
"slaves": 14673,
"chop": 15780,
"respective": 13922,
"recreating": 2910,
"offsets": 10789,
"sunny": 11455,
"Madame": 5197,
"drained": 17743,
"crane": 12250,
"Pamplona": 27525,
"didn't": 6051,
"dispute": 7176,
"cracker": 29748,
"turgid": 32735,
"fellas": 32844,
"1853": 4440,
"SALLY": 11795,
"ARCO's": 22561,
"headaches": 4752,
"delegation": 11473,
"Stuff": 28866,
"amendments": 31413,
"hiring": 10699,
"compatibility": 2219,
"estimated": 7143,
"fruits": 8056,
"disrepair": 19854,
"i'll": 26975,
"Mechanics": 28998,
"Sizzle": 15788,
"stakes": 7458,
"http://www.flickr.com/photos/adamtolle/6094960940/in/set-72157627535453128/": 26615,
"incensed": 9141,
"bathing": 29520,
"sky": 8887,
"translator": 5670,
"21,600": 25764,
"befuddled": 20151,
"mL": 18412,
"out": 598,
"stomach": 9334,
"water-melon": 32887,
"25.1": 2950,
"Machina": 8451,
"charitable": 5887,
"scoured": 9175,
"Re-evaluate": 18256,
"USE": 28399,
"realization": 8758,
"violates": 7451,
"burst": 8946,
"administrator": 14684,
"UCAS": 26122,
"hoped": 1336,
"institutions": 717,
"Nacer": 13119,
"I'm": 5249,
"learned": 5025,
"restraint": 14242,
"type": 685,
"injured": 11037,
"entree": 28819,
"brag": 31001,
"Canada": 10858,
"Rudolf": 4453,
"endowment": 14186,
"gallon": 18424,
"Whereas": 13706,
"Nasser's": 30676,
"minimum": 10824,
"Hooser": 23771,
"exulting": 30557,
"hesitate": 22233,
"enrichment": 847,
"livid": 32086,
"integral": 16713,
"pie": 10584,
"discomfiture": 30586,
"effacing": 31596,
"View": 12222,
"Single": 4147,
"regret": 14421,
"prolong": 24847,
"gingerly": 32239,
"hookless": 27139,
"library": 9838,
"Hambali": 20650,
"Jurek": 29615,
"hotheads": 20417,
"Supporting": 2392,
"l-": 6272,
"argue": 2907,
"nor": 2189,
"prosecution": 19408,
"connects": 15460,
"lasping": 30496,
"Marriott": 15112,
"Robinson's": 19945,
"Presentation": 21191,
"dined": 28894,
"faded": 8759,
"Carriles": 19343,
"Scampi": 29797,
"compact": 2050,
"connotations": 8189,
"itty": 6273,
"biologist": 25028,
"neither": 940,
"Denmark": 17211,
"Answered": 24457,
"Quebec": 24105,
"rhetorical": 5020,
"gouging": 23336,
"perpetrated": 12849,
"homer": 4884,
"agrees": 21366,
"Conference": 11415,
"recommending": 12976,
"affecting": 25125,
"Nos": 31382,
"Skip": 28172,
"steel": 6459,
"i'm": 22556,
"Benin": 16476,
"French": 1730,
"Many": 2666,
"assisting": 5973,
"Lock": 24013,
"blah": 15741,
"deleterious": 32953,
"maintains": 7439,
"Guardian": 4485,
"glut": 9472,
"Corps": 3558,
"murmured": 31271,
"9": 1442,
"Agencies": 24730,
"Ultraviolet": 2192,
"manufacturer": 21216,
"bodyworker": 28375,
"over-rated": 28524,
"offs": 25020,
"Cate": 24669,
"07/30/2001": 21070,
"R.I": 24799,
"directly": 346,
"Eleuthra": 23238,
"association": 13228,
"bodice": 30014,
"Truth": 19244,
"statutes": 7620,
"Performance": 21229,
"Dunn": 23647,
"drving": 30021,
"museums": 7464,
"JMB": 23260,
"abhorrent": 14404,
"consuming": 10658,
"apologetically": 31698,
"rich": 2980,
"abiding": 19867,
"supposed": 3925,
"anal": 10496,
"Nomination": 24703,
"regreted": 28669,
"humanatarian": 24520,
"Holocaust": 14372,
"re-invest": 8120,
"Turk": 27499,
"expanding": 426,
"bared": 31968,
"bound": 9578,
"http://dianacamera.com": 26542,
"Nepal": 19525,
"confiscated": 7642,
"11:15:11": 23816,
"Depression": 25856,
"reinforces": 10863,
"naw": 6099,
"Para.": 22301,
"Jagger": 25624,
"smeared": 8825,
"flavors": 16190,
"c.l.h.warwick@durham.ac.uk": 30,
"killie": 27876,
"Controls": 30214,
"owned": 12804,
"de'": 27111,
"Gran'": 31106,
"Baking": 32211,
"Burkes": 32280,
"unspecified": 25179,
"CDG": 26600,
"freakin": 27574,
"Lanka's": 19077,
"Walloch": 21142,
"pipefitters": 23170,
"thundering": 32632,
"lull": 12886,
"borough": 16583,
"account": 3404,
"holocaust": 20448,
"France": 957,
"Le": 28287,
"dais": 31818,
"Package": 28067,
"start": 2175,
"Hassan": 12227,
"Co-founder": 12223,
"lest": 9491,
"Overall": 14891,
"earning": 4139,
"lids": 18063,
"relaxes": 24631,
"Price": 21643,
"quill": 32327,
"protects": 14166,
"xferring": 21088,
"stranded": 27716,
"moved": 3144,
"Mm": 6037,
"Tell": 6210,
"Pointe": 16657,
"hillocks": 10029,
"Evangelical": 5594,
"Fuji": 26938,
"recipients": 556,
"brings": 171,
"jewel": 17176,
"flicker": 27214,
"mother’s": 9528,
"dharmad...@gmail.com": 24027,
"Invisible": 6927,
"ritual": 15312,
"chinatown": 29028,
"1973": 3487,
"04/04/2001": 22572,
"smugglers": 12177,
"391,000": 17403,
"raft": 8958,
"feared": 15412,
"Corporation": 12829,
"strawberries": 8234,
"bdr": 29610,
"public-relations": 30655,
"REPORT": 11493,
"Boiled": 27621,
"At": 1370,
"anti-India": 19565,
"Azzam": 20860,
"noise": 7779,
"sofa": 29827,
"abstinence": 26068,
"distemper": 7033,
"1251": 22006,
"slick": 9693,
"M-m": 7046,
"03/02/2001": 21594,
"Sh-": 7025,
"Iraq's": 19889,
"Navigating": 8336,
"alma": 26017,
"endanger": 11192,
"duel": 3883,
"Elaine": 13333,
"condor": 9451,
"Trump": 12100,
"afore": 25655,
"pollutes": 30847,
"groupings": 15025,
"Intelligencer": 24317,
"sheik's": 20842,
"Parliament": 7256,
"disregard": 15090,
"saluted": 31848,
"sprawled": 12533,
"Clauses": 22231,
"chewed": 28006,
"Sirae": 19610,
"11-20-2000": 23813,
"PR": 23943,
"dinner's": 32072,
"Mariner": 27491,
"remember": 6065,
"popes": 25515,
"punch": 11115,
"thy": 20118,
"petrol": 24563,
"heated": 26883,
"calcium": 27893,
"Barrett": 14453,
"system": 540,
"Khattab": 18621,
"Southampton": 32462,
"Twenty": 6044,
"dusty": 8900,
"startled": 10085,
"Reactive": 10296,
"Dessert": 29168,
"Me": 4108,
"Ryder": 4116,
"Ahmadinejad": 20248,
"Conquest": 20567,
"oz": 18436,
"fastened": 30470,
"PSP": 26782,
"Micro": 24191,
"specific": 41,
"Chu": 12380,
"oak": 11970,
"sustainable": 16408,
"Twante": 19604,
"sprits": 30889,
"Announcing": 14388,
"Often": 5048,
"gorse": 25574,
"safest": 27223,
"neutral": 7278,
"hoarier": 30633,
"crests": 9070,
"Adelle": 11700,
"Beside": 17174,
"NWP": 21304,
"media's": 19918,
"Shee": 28027,
"Val": 23550,
"wile": 27579,
"unspeakably": 25820,
"XP": 12800,
"Surrey": 26124,
"Distinguish": 14991,
"March": 2125,
"Ginger": 21754,
"Mixed": 28534,
"pavements": 32658,
"securing": 4394,
"1947": 3457,
"70th": 30246,
"exceptionally": 14346,
"mountaineering": 10021,
"rapacity": 31289,
"Terrell": 19383,
"http://www.chernobyl.info/en": 18714,
"-2-F.doc": 21506,
"girlfriend": 8868,
"minicab": 20763,
"Martyrs": 20858,
"post-Chavez": 19373,
"2,210": 25816,
"flexibiltiy": 22718,
"2/7/2005": 23950,
"stared": 31197,
"relatedness": 2889,
"Napa": 28674,
"Suilen": 2230,
"Guilds": 24252,
"preparations": 18583,
"gun": 9544,
"Credit's": 22525,
"k": 21018,
"settlers": 14674,
"useless": 9768,
"striking": 1754,
"Sonya": 21069,
"unfair": 8414,
"furze": 31704,
"theorized": 12744,
"programmed": 20246,
"Earthquakes": 26959,
"Vienna": 19144,
"blower": 27316,
"lobbed": 25897,
"571-9571": 21082,
"law's": 32803,
"Alfred": 4047,
"shore": 9406,
"Duncan": 22799,
"standard": 1691,
"Fabo": 952,
"attachment": 21227,
"opposites": 32380,
"explicitly": 13733,
"youngsters": 18588,
"fifth": 12946,
"icing": 17834,
"misty": 30981,
"basketball": 10856,
"implant": 9519,
"puppy": 9742,
"poll": 12677,
"penetrated": 20401,
"wreck": 29898,
"Ramadi": 18627,
"QLD": 24948,
"working": 1512,
"Note": 10767,
"Humans": 14812,
"bellow": 32159,
"cute": 5764,
"widgets": 8063,
"Aztecs": 15357,
"Hyundai": 29549,
"constructs": 2541,
"agreeing": 12298,
"PADILLA": 14351,
"pairs": 12087,
"yearning": 14190,
"Freshly": 18388,
"eThink": 21541,
"popularly": 24150,
"19:14": 24469,
"desperately": 8456,
"Transmission": 21047,
"281-518-1081": 22138,
"tame": 26818,
"Write": 5870,
"url": 24893,
"revealed": 5902,
"flabby": 31215,
"SCREENS": 11863,
"Cochin": 4029,
"07/19/2001": 22818,
"casting": 7065,
"+1918584-4428": 17450,
"positions": 17661,
"acceptable": 6578,
"organization": 486,
"diachronic": 1085,
"Islamic": 12237,
"faction": 20565,
"Comparison": 26691,
"Diagram": 15609,
"upstage": 14348,
"Per": 21109,
"television": 2932,
"incessant": 14031,
"fine": 581,
"burden": 7147,
"silk": 8818,
"blasphemies": 30452,
"recipient": 5380,
"blogging": 5222,
"dissolved": 18426,
"spiraled": 6858,
"bomb": 12202,
"Curve": 4879,
"OPENING": 29696,
"scar": 31226,
"sights": 17248,
"Destiny": 13999,
"veterans’": 19247,
"machines": 8355,
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
Showing preview only (709K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (8803 symbols across 581 files)
FILE: fuzz/fuzz_targets/fuzz_harper_comment.rs
type Language (line 8) | struct Language(String);
method arbitrary (line 48) | fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
constant LANGUAGES (line 10) | const LANGUAGES: [&str; 34] = [
type Input (line 55) | struct Input {
method arbitrary (line 61) | fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
method arbitrary_take_rest (line 66) | fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self> {
FILE: harper-asciidoc/src/lib.rs
type AsciidocParser (line 6) | pub struct AsciidocParser {
method node_condition (line 11) | fn node_condition(n: &Node) -> bool {
method default (line 20) | fn default() -> Self {
method parse (line 31) | fn parse(&self, source: &[char]) -> Vec<Token> {
FILE: harper-brill/src/lib.rs
constant BRILL_TAGGER_SOURCE (line 9) | const BRILL_TAGGER_SOURCE: &str = include_str!("../trained_tagger_model....
function uncached_brill_tagger (line 14) | fn uncached_brill_tagger() -> BrillTagger<FreqDict> {
function brill_tagger (line 20) | pub fn brill_tagger() -> Arc<BrillTagger<FreqDict>> {
constant BRILL_CHUNKER_SOURCE (line 24) | const BRILL_CHUNKER_SOURCE: &str = include_str!("../trained_chunker_mode...
function uncached_brill_chunker (line 29) | fn uncached_brill_chunker() -> BrillChunker {
function brill_chunker (line 35) | pub fn brill_chunker() -> Arc<BrillChunker> {
constant BURN_CHUNKER_VOCAB (line 39) | const BURN_CHUNKER_VOCAB: &[u8; 627993] = include_bytes!("../finished_ch...
constant BURN_CHUNKER_BIN (line 40) | const BURN_CHUNKER_BIN: &[u8; 806312] = include_bytes!("../finished_chun...
function uncached_burn_chunker (line 46) | fn uncached_burn_chunker() -> CachedChunker<BurnChunkerCpu> {
function burn_chunker (line 56) | pub fn burn_chunker() -> Rc<CachedChunker<BurnChunkerCpu>> {
FILE: harper-cli/src/annotate.rs
type Annotation (line 9) | pub(super) struct Annotation {
method into_label (line 20) | pub(super) fn into_label(
method iter_labels_from_document (line 33) | pub(super) fn iter_labels_from_document<'inpt_id>(
method iter_from_document (line 44) | fn iter_from_document(
type AnnotationType (line 84) | pub(super) enum AnnotationType {
method build_report (line 91) | pub(super) fn build_report<'input_id>(
method get_title (line 110) | pub(super) fn get_title(&self) -> &'static str {
method get_title_with_tags (line 120) | pub(super) fn get_title_with_tags(&self, tags: &[&str]) -> Cow<'static...
type RandomColorIter (line 132) | struct RandomColorIter {
method new (line 136) | fn new() -> Self {
type Item (line 144) | type Item = Color;
method next (line 145) | fn next(&mut self) -> Option<Self::Item> {
function get_color_for_enum_variant (line 155) | fn get_color_for_enum_variant<T: IntoEnumIterator + PartialEq>(variant_t...
function get_color_for_index (line 168) | fn get_color_for_index(idx_to_color: usize) -> Color {
FILE: harper-cli/src/input.rs
type InputTrait (line 14) | pub(crate) trait InputTrait {
method get_identifier (line 17) | fn get_identifier(&self) -> Cow<'_, str>;
type AnyInput (line 24) | pub(crate) enum AnyInput {
method from (line 35) | fn from(input_string: String) -> Self {
method from (line 48) | fn from(input_string: String) -> Self {
method from (line 57) | fn from(input_string: String) -> Self {
FILE: harper-cli/src/input/multi_input.rs
type MultiInputTrait (line 11) | pub(crate) trait MultiInputTrait: InputTrait {
method iter_inputs (line 17) | fn iter_inputs(&self) -> anyhow::Result<impl Iterator<Item = SingleInp...
method iter_inputs (line 67) | fn iter_inputs(&self) -> anyhow::Result<impl Iterator<Item = SingleInp...
type MultiInput (line 22) | pub(crate) enum MultiInput {
method try_parse_string (line 29) | pub(crate) fn try_parse_string(input_string: &str) -> anyhow::Result<S...
type DirInput (line 48) | pub(crate) struct DirInput {
method iter_files (line 54) | pub(crate) fn iter_files(&self) -> anyhow::Result<impl Iterator<Item =...
method get_identifier (line 72) | fn get_identifier(&self) -> Cow<'_, str> {
FILE: harper-cli/src/input/single_input.rs
type SingleInputTrait (line 24) | pub(crate) trait SingleInputTrait: InputTrait {
method load (line 27) | fn load(
method load_with_parser (line 38) | fn load_with_parser(
method get_parser (line 48) | fn get_parser(&self, _markdown_options: MarkdownOptions) -> Box<dyn Pa...
method get_content (line 53) | fn get_content(&self) -> anyhow::Result<Cow<'_, str>>;
method get_content (line 131) | fn get_content(&self) -> anyhow::Result<Cow<'_, str>> {
method get_parser (line 136) | fn get_parser(&self, _markdown_options: MarkdownOptions) -> Box<dyn Pa...
method get_content (line 181) | fn get_content(&self) -> anyhow::Result<Cow<'_, str>> {
method get_content (line 195) | fn get_content(&self) -> anyhow::Result<Cow<'_, str>> {
type SingleInput (line 58) | pub(crate) enum SingleInput {
method parse_string (line 72) | pub(crate) fn parse_string(input_string: &str) -> Self {
type SingleInputOptionExt (line 85) | pub trait SingleInputOptionExt {
method unwrap_or_read_from_stdin (line 87) | fn unwrap_or_read_from_stdin(self) -> SingleInput;
method unwrap_or_read_from_stdin (line 90) | fn unwrap_or_read_from_stdin(self) -> SingleInput {
type FileInput (line 97) | pub(crate) struct FileInput {
method path (line 102) | pub(crate) fn path(&self) -> &PathBuf {
method try_from_path (line 108) | pub(crate) fn try_from_path(path: &Path) -> anyhow::Result<Self> {
method from_path_unchecked (line 123) | pub(crate) fn from_path_unchecked(path: &Path) -> Self {
method get_identifier (line 168) | fn get_identifier(&self) -> Cow<'_, str> {
type TextInput (line 177) | pub(crate) struct TextInput {
method get_identifier (line 186) | fn get_identifier(&self) -> Cow<'_, str> {
type StdinInput (line 193) | pub(crate) struct StdinInput;
method get_identifier (line 202) | fn get_identifier(&self) -> Cow<'_, str> {
FILE: harper-cli/src/lint.rs
function load_dict (line 28) | fn load_dict(path: &Path) -> anyhow::Result<MutableDictionary> {
function load_weirpacks (line 40) | fn load_weirpacks(inputs: &[SingleInput]) -> anyhow::Result<Vec<Weirpack...
function file_dict_name (line 61) | fn file_dict_name(path: &Path) -> PathBuf {
type OutputFormat (line 76) | pub enum OutputFormat {
type LintOptions (line 86) | pub struct LintOptions {
type ReportStyle (line 97) | enum ReportStyle {
type JsonFileResult (line 105) | struct JsonFileResult {
type JsonLint (line 114) | struct JsonLint {
type JsonSpan (line 128) | struct JsonSpan {
function char_index_to_line_col (line 134) | fn char_index_to_line_col(source: &[char], index: usize) -> (usize, usiz...
type InputInfo (line 141) | struct InputInfo<'a> {
type InputJob (line 147) | struct InputJob {
function plain_path (line 155) | fn plain_path(&self) -> String {
function format_path (line 164) | fn format_path(&self) -> String {
function lint (line 178) | pub fn lint(
type LintOneResult (line 365) | struct LintOneResult {
type FullInputInfo (line 373) | struct FullInputInfo<'a> {
function lint_one_input (line 380) | fn lint_one_input(
function configure_lint_group (line 537) | fn configure_lint_group(
function count_lint_kinds_and_rules (line 564) | fn count_lint_kinds_and_rules(
function collect_lint_kind_rule_pairs (line 583) | fn collect_lint_kind_rule_pairs(
function collect_spellos (line 600) | fn collect_spellos(
function single_input_report (line 615) | fn single_input_report(
function find_longest_doc_line (line 750) | fn find_longest_doc_line(toks: &[Token]) -> usize {
function final_report (line 781) | fn final_report(
function lint_kind_to_rgb (line 912) | fn lint_kind_to_rgb() -> &'static [(LintKind, (u8, u8, u8))] {
function rgb_for_lint_kind (line 937) | fn rgb_for_lint_kind(olk: Option<&LintKind>) -> (u8, u8, u8) {
function print_formatted_items (line 947) | fn print_formatted_items(items: impl IntoIterator<Item = (Option<String>...
FILE: harper-cli/src/main.rs
type Cli (line 46) | struct Cli {
type Args (line 56) | enum Args {
function main (line 231) | fn main() -> anyhow::Result<()> {
function parse_dialect (line 1004) | fn parse_dialect(dialect: &str) -> anyhow::Result<Dialect> {
function line_to_parts (line 1016) | fn line_to_parts(line: &str) -> (String, String) {
function print_word_derivations (line 1024) | fn print_word_derivations(word: &str, annot: &str, dictionary: &impl Dic...
FILE: harper-cli/tests/no_color.rs
function harper_cli (line 3) | fn harper_cli() -> Command {
constant BAD_INPUT (line 8) | const BAD_INPUT: &str = "This is an test.";
function has_ansi (line 10) | fn has_ansi(bytes: &[u8]) -> bool {
function default_output_contains_ansi (line 15) | fn default_output_contains_ansi() {
function no_color_flag_strips_ansi (line 30) | fn no_color_flag_strips_ansi() {
function no_color_env_strips_ansi (line 45) | fn no_color_env_strips_ansi() {
FILE: harper-cli/tests/output_format.rs
function harper_cli (line 4) | fn harper_cli() -> Command {
constant BAD_INPUT (line 9) | const BAD_INPUT: &str = "This is an test.";
function json_format_is_valid_json (line 12) | fn json_format_is_valid_json() {
function json_format_no_ansi (line 52) | fn json_format_no_ansi() {
function json_directory_paths_no_ansi (line 77) | fn json_directory_paths_no_ansi() {
function compact_directory_paths_no_ansi (line 109) | fn compact_directory_paths_no_ansi() {
function compact_format_one_line_per_lint (line 132) | fn compact_format_one_line_per_lint() {
function default_format_unchanged (line 156) | fn default_format_unchanged() {
FILE: harper-comments/src/comment_parser.rs
type CommentParser (line 12) | pub struct CommentParser {
method create_ident_dict (line 17) | pub fn create_ident_dict(&self, source: &[char]) -> Option<MutableDict...
method new_from_language_id (line 21) | pub fn new_from_language_id(
method new_from_filename (line 77) | pub fn new_from_filename(filename: &Path, markdown_options: MarkdownOp...
method filename_to_filetype (line 86) | fn filename_to_filetype(path: &Path) -> Option<&'static str> {
method node_condition (line 120) | fn node_condition(n: &Node) -> bool {
method parse (line 126) | fn parse(&self, source: &[char]) -> Vec<Token> {
function hang (line 137) | fn hang() {
FILE: harper-comments/src/comment_parsers/go.rs
type Go (line 8) | pub struct Go {
method new (line 13) | pub fn new(parser: Lrc<dyn Parser>) -> Self {
method new_markdown (line 17) | pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {
method parse (line 23) | fn parse(&self, source: &[char]) -> Vec<Token> {
FILE: harper-comments/src/comment_parsers/javadoc.rs
type JavaDoc (line 10) | pub struct JavaDoc {
method parse (line 15) | fn parse(&self, source: &[char]) -> Vec<Token> {
FILE: harper-comments/src/comment_parsers/jsdoc.rs
type JsDoc (line 9) | pub struct JsDoc {
method new (line 14) | pub fn new(parser: Lrc<dyn Parser>) -> Self {
method new_markdown (line 18) | pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {
method parse (line 24) | fn parse(&self, source: &[char]) -> Vec<Token> {
function parse_line (line 51) | fn parse_line(source: &[char], parser: Lrc<dyn Parser>) -> Vec<Token> {
function mark_inline_tags (line 94) | pub(super) fn mark_inline_tags(tokens: &mut [Token]) {
function parse_inline_tag (line 126) | fn parse_inline_tag(tokens: &[Token]) -> Option<usize> {
function escapes_loop (line 176) | fn escapes_loop() {
function handles_inline_link (line 184) | fn handles_inline_link() {
function handles_class (line 229) | fn handles_class() {
FILE: harper-comments/src/comment_parsers/lua.rs
type Lua (line 9) | pub struct Lua {
method new (line 14) | pub fn new(parser: Lrc<dyn Parser>) -> Self {
method new_markdown (line 18) | pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {
method parse (line 24) | fn parse(&self, source: &[char]) -> Vec<Token> {
function starts_with_prefix (line 60) | fn starts_with_prefix(source: &[char]) -> bool {
function parse_line (line 67) | fn parse_line(source: &[char], parser: Lrc<dyn Parser>) -> Vec<Token> {
FILE: harper-comments/src/comment_parsers/mod.rs
function without_initiators (line 18) | fn without_initiators(source: &[char]) -> Span<char> {
function is_comment_character (line 36) | fn is_comment_character(c: char) -> bool {
function cleans_empty_comment (line 45) | fn cleans_empty_comment() {
function cleans_empty_comment_with_whitespace (line 51) | fn cleans_empty_comment_with_whitespace() {
FILE: harper-comments/src/comment_parsers/solidity.rs
type Solidity (line 10) | pub struct Solidity {
method new (line 15) | pub fn new(parser: Lrc<dyn Parser>) -> Self {
method new_markdown (line 19) | pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {
method parse (line 25) | fn parse(&self, source: &[char]) -> Vec<Token> {
function parse_line (line 52) | fn parse_line(source: &[char], parser: Lrc<dyn Parser>) -> Vec<Token> {
FILE: harper-comments/src/comment_parsers/unit.rs
type Unit (line 14) | pub struct Unit {
method new (line 19) | pub fn new(parser: Lrc<dyn Parser>) -> Self {
method new_markdown (line 23) | pub fn new_markdown(markdown_options: MarkdownOptions) -> Self {
method parse (line 29) | fn parse(&self, source: &[char]) -> Vec<Token> {
function parse_line (line 66) | fn parse_line(source: &[char], parser: Lrc<dyn Parser>) -> Vec<Token> {
function line_is_code_fence (line 84) | fn line_is_code_fence(source: &[char]) -> bool {
FILE: harper-comments/src/masker.rs
type CommentMasker (line 5) | pub struct CommentMasker {
method create_ident_dict (line 11) | pub fn create_ident_dict(&self, source: &[char]) -> Option<MutableDict...
method new (line 15) | pub fn new(
method new_with_ignore_condition (line 36) | pub fn new_with_ignore_condition(
method create_mask (line 49) | fn create_mask(&self, source: &[char]) -> harper_core::Mask {
FILE: harper-comments/tests/language_support_sources/clean.rs
type TestStruct (line 3) | struct TestStruct {}
method test_function (line 8) | fn test_function() {}
method test_function (line 12) | fn test_function() {}
FILE: harper-comments/tests/language_support_sources/eof.rs
function main (line 1) | fn main() {}
FILE: harper-comments/tests/language_support_sources/ignore_comments.c
function main (line 2) | int main() {
FILE: harper-comments/tests/language_support_sources/ignore_comments.rs
type Testing (line 5) | pub struct Testing {
FILE: harper-comments/tests/language_support_sources/issue_132.rs
function main (line 6) | fn main() {
FILE: harper-comments/tests/language_support_sources/javadoc_clean_simple.java
class TestClass (line 1) | class TestClass {
method main (line 6) | public static void main(String[] args) {
FILE: harper-comments/tests/language_support_sources/javadoc_complex.java
class TestClass (line 1) | class TestClass {
method main (line 15) | public static void main(String[] args) {
method greet (line 24) | public static void greet(String name) {
FILE: harper-comments/tests/language_support_sources/jsdoc.ts
function test (line 3) | function test(){}
class Clazz (line 7) | class Clazz { }
function foo (line 24) | function foo(n, o, d) {
FILE: harper-comments/tests/language_support_sources/multiline_comments.cpp
function test (line 3) | int test() {}
function arbitrary (line 10) | int arbitrary() {}
FILE: harper-comments/tests/language_support_sources/multiline_comments.ts
function test (line 3) | function test() {}
function arbitrary (line 10) | function arbitrary() {}
FILE: harper-core/benches/parse_essay.rs
function parse_essay (line 9) | fn parse_essay(c: &mut Criterion) {
function lint_essay (line 15) | fn lint_essay(c: &mut Criterion) {
function lint_essay_uncached (line 25) | fn lint_essay_uncached(c: &mut Criterion) {
function criterion_benchmark (line 36) | pub fn criterion_benchmark(c: &mut Criterion) {
FILE: harper-core/build.rs
function main (line 3) | fn main() {
FILE: harper-core/src/case.rs
function copy_casing (line 14) | pub fn copy_casing(
type Case (line 38) | pub enum Case {
method apply_to (line 49) | pub fn apply_to(&self, char: char) -> impl Iterator<Item = char> + use...
type Error (line 59) | type Error = ();
method try_from (line 64) | fn try_from(value: char) -> Result<Self, Self::Error> {
type CaseIterExt (line 77) | pub trait CaseIterExt {
method get_casing (line 78) | fn get_casing(self) -> impl Iterator<Item = Case>;
method get_casing_unfiltered (line 79) | fn get_casing_unfiltered(self) -> SmallVec<[Option<Case>; CHAR_STRING_...
method get_casing (line 84) | fn get_casing(self) -> impl Iterator<Item = Case> {
method get_casing_unfiltered (line 92) | fn get_casing_unfiltered(self) -> SmallVec<[Option<Case>; CHAR_STRING_...
FILE: harper-core/src/char_ext.rs
type Sealed (line 7) | pub trait Sealed {}
type CharExt (line 12) | pub trait CharExt: private::Sealed {
method is_cjk (line 13) | fn is_cjk(&self) -> bool;
method is_english_lingual (line 15) | fn is_english_lingual(&self) -> bool;
method is_emoji (line 16) | fn is_emoji(&self) -> bool;
method is_punctuation (line 17) | fn is_punctuation(&self) -> bool;
method is_vowel (line 21) | fn is_vowel(&self) -> bool;
method normalized (line 22) | fn normalized(&self) -> Self;
method is_english_lingual (line 26) | fn is_english_lingual(&self) -> bool {
method normalized (line 37) | fn normalized(&self) -> Self {
method is_emoji (line 46) | fn is_emoji(&self) -> bool {
method is_cjk (line 62) | fn is_cjk(&self) -> bool {
method is_punctuation (line 97) | fn is_punctuation(&self) -> bool {
method is_vowel (line 101) | fn is_vowel(&self) -> bool {
function cjk_is_not_english_lingual (line 111) | fn cjk_is_not_english_lingual() {
FILE: harper-core/src/char_string.rs
constant CHAR_STRING_INLINE_SIZE (line 7) | pub(crate) const CHAR_STRING_INLINE_SIZE: usize = 16;
type CharString (line 11) | pub type CharString = SmallVec<[char; CHAR_STRING_INLINE_SIZE]>;
type Sealed (line 14) | pub trait Sealed {}
type CharStringExt (line 20) | pub trait CharStringExt: private::Sealed {
method to_lower (line 22) | fn to_lower(&'_ self) -> Cow<'_, [char]>;
method normalized (line 25) | fn normalized(&'_ self) -> Cow<'_, [char]>;
method to_string (line 28) | fn to_string(&self) -> String;
method eq_ignore_ascii_case_chars (line 32) | fn eq_ignore_ascii_case_chars(&self, other: &[char]) -> bool;
method eq_ignore_ascii_case_str (line 36) | fn eq_ignore_ascii_case_str(&self, other: &str) -> bool;
method eq_any_ignore_ascii_case_str (line 40) | fn eq_any_ignore_ascii_case_str(&self, others: &[&str]) -> bool;
method eq_any_ignore_ascii_case_chars (line 44) | fn eq_any_ignore_ascii_case_chars(&self, others: &[&[char]]) -> bool;
method starts_with_ignore_ascii_case_str (line 48) | fn starts_with_ignore_ascii_case_str(&self, prefix: &str) -> bool;
method starts_with_any_ignore_ascii_case_str (line 52) | fn starts_with_any_ignore_ascii_case_str(&self, prefixes: &[&str]) -> ...
method ends_with_ignore_ascii_case_chars (line 56) | fn ends_with_ignore_ascii_case_chars(&self, suffix: &[char]) -> bool;
method ends_with_ignore_ascii_case_str (line 60) | fn ends_with_ignore_ascii_case_str(&self, suffix: &str) -> bool;
method ends_with_any_ignore_ascii_case_chars (line 64) | fn ends_with_any_ignore_ascii_case_chars(&self, suffixes: &[&[char]]) ...
method contains_vowel (line 67) | fn contains_vowel(&self) -> bool;
method to_lower (line 71) | fn to_lower(&'_ self) -> Cow<'_, [char]> {
method to_string (line 83) | fn to_string(&self) -> String {
method normalized (line 89) | fn normalized(&'_ self) -> Cow<'_, [char]> {
method eq_ignore_ascii_case_str (line 103) | fn eq_ignore_ascii_case_str(&self, other: &str) -> bool {
method eq_ignore_ascii_case_chars (line 121) | fn eq_ignore_ascii_case_chars(&self, other: &[char]) -> bool {
method eq_any_ignore_ascii_case_str (line 129) | fn eq_any_ignore_ascii_case_str(&self, others: &[&str]) -> bool {
method eq_any_ignore_ascii_case_chars (line 133) | fn eq_any_ignore_ascii_case_chars(&self, others: &[&[char]]) -> bool {
method starts_with_ignore_ascii_case_str (line 139) | fn starts_with_ignore_ascii_case_str(&self, prefix: &str) -> bool {
method starts_with_any_ignore_ascii_case_str (line 150) | fn starts_with_any_ignore_ascii_case_str(&self, prefixes: &[&str]) -> ...
method ends_with_ignore_ascii_case_str (line 156) | fn ends_with_ignore_ascii_case_str(&self, suffix: &str) -> bool {
method ends_with_ignore_ascii_case_chars (line 169) | fn ends_with_ignore_ascii_case_chars(&self, suffix: &[char]) -> bool {
method ends_with_any_ignore_ascii_case_chars (line 182) | fn ends_with_any_ignore_ascii_case_chars(&self, suffixes: &[&[char]]) ...
method contains_vowel (line 188) | fn contains_vowel(&self) -> bool {
function eq_ignore_ascii_case_chars_matches_lowercase (line 208) | fn eq_ignore_ascii_case_chars_matches_lowercase() {
function eq_ignore_ascii_case_chars_does_not_match_different_word (line 213) | fn eq_ignore_ascii_case_chars_does_not_match_different_word() {
function eq_ignore_ascii_case_str_matches_lowercase (line 218) | fn eq_ignore_ascii_case_str_matches_lowercase() {
function eq_ignore_ascii_case_str_does_not_match_different_word (line 223) | fn eq_ignore_ascii_case_str_does_not_match_different_word() {
function ends_with_ignore_ascii_case_chars_matches_suffix (line 228) | fn ends_with_ignore_ascii_case_chars_matches_suffix() {
function ends_with_ignore_ascii_case_chars_does_not_match_different_suffix (line 233) | fn ends_with_ignore_ascii_case_chars_does_not_match_different_suffix() {
function ends_with_ignore_ascii_case_str_matches_suffix (line 241) | fn ends_with_ignore_ascii_case_str_matches_suffix() {
function ends_with_ignore_ascii_case_str_does_not_match_different_suffix (line 246) | fn ends_with_ignore_ascii_case_str_does_not_match_different_suffix() {
function differs_only_by_length_1 (line 251) | fn differs_only_by_length_1() {
function differs_only_by_length_2 (line 256) | fn differs_only_by_length_2() {
FILE: harper-core/src/currency.rs
type Currency (line 8) | pub enum Currency {
method from_char (line 34) | pub fn from_char(c: char) -> Option<Self> {
method to_char (line 53) | pub fn to_char(&self) -> char {
method format_amount (line 70) | pub fn format_amount(&self, amount: &Number) -> String {
FILE: harper-core/src/dict_word_metadata.rs
type DictWordMetadata (line 20) | pub struct DictWordMetadata {
method infer_pos_tag (line 132) | pub fn infer_pos_tag(&self) -> Option<UPOS> {
method or (line 187) | pub fn or(&self, other: &Self) -> Self {
method enforce_pos_exclusivity (line 200) | pub fn enforce_pos_exclusivity(&mut self, pos: &UPOS) {
method get_person (line 396) | pub fn get_person(&self) -> Option<Person> {
method is_first_person_plural_pronoun (line 400) | pub fn is_first_person_plural_pronoun(&self) -> bool {
method is_first_person_singular_pronoun (line 411) | pub fn is_first_person_singular_pronoun(&self) -> bool {
method is_third_person_plural_pronoun (line 422) | pub fn is_third_person_plural_pronoun(&self) -> bool {
method is_third_person_singular_pronoun (line 433) | pub fn is_third_person_singular_pronoun(&self) -> bool {
method is_third_person_pronoun (line 444) | pub fn is_third_person_pronoun(&self) -> bool {
method is_second_person_pronoun (line 454) | pub fn is_second_person_pronoun(&self) -> bool {
method is_verb_lemma (line 465) | pub fn is_verb_lemma(&self) -> bool {
method is_verb_past_form (line 476) | pub fn is_verb_past_form(&self) -> bool {
method is_verb_simple_past_form (line 483) | pub fn is_verb_simple_past_form(&self) -> bool {
method is_verb_past_participle_form (line 490) | pub fn is_verb_past_participle_form(&self) -> bool {
method is_verb_progressive_form (line 497) | pub fn is_verb_progressive_form(&self) -> bool {
method is_verb_third_person_singular_present_form (line 504) | pub fn is_verb_third_person_singular_present_form(&self) -> bool {
method is_singular_noun (line 514) | pub fn is_singular_noun(&self) -> bool {
method is_non_singular_noun (line 524) | pub fn is_non_singular_noun(&self) -> bool {
method is_countable_noun (line 536) | pub fn is_countable_noun(&self) -> bool {
method is_non_countable_noun (line 546) | pub fn is_non_countable_noun(&self) -> bool {
method is_mass_noun_only (line 558) | pub fn is_mass_noun_only(&self) -> bool {
method is_nominal (line 572) | pub fn is_nominal(&self) -> bool {
method is_singular_nominal (line 577) | pub fn is_singular_nominal(&self) -> bool {
method is_plural_nominal (line 582) | pub fn is_plural_nominal(&self) -> bool {
method is_possessive_nominal (line 590) | pub fn is_possessive_nominal(&self) -> bool {
method is_non_singular_nominal (line 595) | pub fn is_non_singular_nominal(&self) -> bool {
method is_non_plural_nominal (line 600) | pub fn is_non_plural_nominal(&self) -> bool {
method get_degree (line 606) | pub fn get_degree(&self) -> Option<Degree> {
method is_comparative_adjective (line 610) | pub fn is_comparative_adjective(&self) -> bool {
method is_superlative_adjective (line 619) | pub fn is_superlative_adjective(&self) -> bool {
method is_positive_adjective (line 629) | pub fn is_positive_adjective(&self) -> bool {
method is_quantifier (line 645) | pub fn is_quantifier(&self) -> bool {
method is_swear (line 652) | pub fn is_swear(&self) -> bool {
method is_lowercase (line 663) | pub fn is_lowercase(&self) -> bool {
method is_titlecase (line 677) | pub fn is_titlecase(&self) -> bool {
method is_allcaps (line 687) | pub fn is_allcaps(&self) -> bool {
method is_lower_camel (line 701) | pub fn is_lower_camel(&self) -> bool {
method is_upper_camel (line 720) | pub fn is_upper_camel(&self) -> bool {
method is_apostrophized (line 725) | pub fn is_apostrophized(&self) -> bool {
method is_roman_numerals (line 729) | pub fn is_roman_numerals(&self) -> bool {
method merge (line 734) | pub fn merge(&mut self, other: &Self) -> &mut Self {
function default_false (line 59) | fn default_false() -> bool {
function default_none (line 64) | fn default_none<T>() -> Option<T> {
function default_default (line 69) | fn default_default<T: Default>() -> T {
type VerbForm (line 783) | pub enum VerbForm {
type VerbFormFlagsUnderlyingType (line 799) | pub type VerbFormFlagsUnderlyingType = u32;
type VerbData (line 818) | pub struct VerbData {
method or (line 827) | pub fn or(&self, other: &Self) -> Self {
type NounData (line 848) | pub struct NounData {
method or (line 859) | pub fn or(&self, other: &Self) -> Self {
type Person (line 873) | pub enum Person {
type PronounData (line 881) | pub struct PronounData {
method or (line 894) | pub fn or(&self, other: &Self) -> Self {
type DeterminerData (line 910) | pub struct DeterminerData {
method or (line 918) | pub fn or(&self, other: &Self) -> Self {
type Degree (line 931) | pub enum Degree {
type AdjectiveData (line 941) | pub struct AdjectiveData {
method or (line 947) | pub fn or(&self, other: &Self) -> Self {
type AdverbData (line 958) | pub struct AdverbData {
method or (line 966) | pub fn or(&self, _other: &Self) -> Self {
type ConjunctionData (line 976) | pub struct ConjunctionData {}
method or (line 980) | pub fn or(&self, _other: &Self) -> Self {
type AffixData (line 986) | pub struct AffixData {
method or (line 993) | pub fn or(&self, _other: &Self) -> Self {
type Dialect (line 1022) | pub enum Dialect {
method try_guess_from_document (line 1033) | pub fn try_guess_from_document(document: &Document) -> Option<Self> {
method try_from_abbr (line 1055) | pub fn try_from_abbr(abbr: &str) -> Option<Self> {
type Error (line 1067) | type Error = ();
method try_from (line 1075) | fn try_from(dialect_flags: DialectFlags) -> Result<Self, Self::Error> {
type DialectFlagsUnderlyingType (line 1096) | type DialectFlagsUnderlyingType = u8;
method is_dialect_enabled (line 1116) | pub fn is_dialect_enabled(self, dialect: Dialect) -> bool {
method is_dialect_enabled_strict (line 1125) | pub fn is_dialect_enabled_strict(self, dialect: Dialect) -> bool {
method from_dialect (line 1137) | pub fn from_dialect(dialect: Dialect) -> Self {
method get_most_used_dialects_from_document (line 1150) | pub fn get_most_used_dialects_from_document(document: &Document) -> Self {
method default (line 1190) | fn default() -> Self {
function md (line 1201) | pub fn md(word: &str) -> DictWordMetadata {
function guess_british_dialect (line 1213) | fn guess_british_dialect() {
function guess_american_dialect (line 1223) | fn guess_american_dialect() {
function puppy_is_noun (line 1237) | fn puppy_is_noun() {
function prepare_is_not_noun (line 1242) | fn prepare_is_not_noun() {
function paris_is_proper_noun (line 1247) | fn paris_is_proper_noun() {
function permit_is_non_proper_noun (line 1252) | fn permit_is_non_proper_noun() {
function hound_is_singular_noun (line 1257) | fn hound_is_singular_noun() {
function pooches_is_non_singular_noun (line 1262) | fn pooches_is_non_singular_noun() {
function loyal_doesnt_pass_is_non_singular_noun (line 1270) | fn loyal_doesnt_pass_is_non_singular_noun() {
function hounds_is_plural_noun (line 1275) | fn hounds_is_plural_noun() {
function pooch_is_non_plural_noun (line 1280) | fn pooch_is_non_plural_noun() {
function fish_is_singular_noun (line 1285) | fn fish_is_singular_noun() {
function fish_is_plural_noun (line 1290) | fn fish_is_plural_noun() {
function fishes_is_plural_noun (line 1295) | fn fishes_is_plural_noun() {
function sheep_is_singular_noun (line 1300) | fn sheep_is_singular_noun() {
function sheep_is_plural_noun (line 1305) | fn sheep_is_plural_noun() {
function sheeps_is_not_word (line 1311) | fn sheeps_is_not_word() {
function bicep_is_singular_noun (line 1316) | fn bicep_is_singular_noun() {
function biceps_is_singular_noun (line 1321) | fn biceps_is_singular_noun() {
function biceps_is_plural_noun (line 1326) | fn biceps_is_plural_noun() {
function aircraft_is_singular_noun (line 1331) | fn aircraft_is_singular_noun() {
function aircraft_is_plural_noun (line 1336) | fn aircraft_is_plural_noun() {
function aircrafts_is_not_word (line 1342) | fn aircrafts_is_not_word() {
function dog_apostrophe_s_is_possessive_noun (line 1347) | fn dog_apostrophe_s_is_possessive_noun() {
function dogs_is_non_possessive_noun (line 1352) | fn dogs_is_non_possessive_noun() {
function dog_is_countable (line 1359) | fn dog_is_countable() {
function dog_is_non_mass_noun (line 1363) | fn dog_is_non_mass_noun() {
function furniture_is_mass_noun (line 1368) | fn furniture_is_mass_noun() {
function furniture_is_non_countable_noun (line 1372) | fn furniture_is_non_countable_noun() {
function equipment_is_mass_noun (line 1377) | fn equipment_is_mass_noun() {
function equipment_is_non_countable_noun (line 1381) | fn equipment_is_non_countable_noun() {
function beer_is_countable_noun (line 1386) | fn beer_is_countable_noun() {
function beer_is_mass_noun (line 1390) | fn beer_is_mass_noun() {
function i_is_pronoun (line 1402) | fn i_is_pronoun() {
function i_is_personal_pronoun (line 1406) | fn i_is_personal_pronoun() {
function i_is_singular_pronoun (line 1410) | fn i_is_singular_pronoun() {
function i_is_subject_pronoun (line 1414) | fn i_is_subject_pronoun() {
function me_is_pronoun (line 1419) | fn me_is_pronoun() {
function me_is_personal_pronoun (line 1423) | fn me_is_personal_pronoun() {
function me_is_singular_pronoun (line 1427) | fn me_is_singular_pronoun() {
function me_is_object_pronoun (line 1431) | fn me_is_object_pronoun() {
function myself_is_pronoun (line 1436) | fn myself_is_pronoun() {
function myself_is_personal_pronoun (line 1440) | fn myself_is_personal_pronoun() {
function myself_is_singular_pronoun (line 1444) | fn myself_is_singular_pronoun() {
function myself_is_reflexive_pronoun (line 1448) | fn myself_is_reflexive_pronoun() {
function we_is_pronoun (line 1457) | fn we_is_pronoun() {
function we_is_personal_pronoun (line 1461) | fn we_is_personal_pronoun() {
function we_is_plural_pronoun (line 1465) | fn we_is_plural_pronoun() {
function we_is_subject_pronoun (line 1469) | fn we_is_subject_pronoun() {
function us_is_pronoun (line 1474) | fn us_is_pronoun() {
function us_is_personal_pronoun (line 1478) | fn us_is_personal_pronoun() {
function us_is_plural_pronoun (line 1482) | fn us_is_plural_pronoun() {
function us_is_object_pronoun (line 1486) | fn us_is_object_pronoun() {
function ourselves_is_pronoun (line 1491) | fn ourselves_is_pronoun() {
function ourselves_is_personal_pronoun (line 1495) | fn ourselves_is_personal_pronoun() {
function ourselves_is_plural_pronoun (line 1499) | fn ourselves_is_plural_pronoun() {
function ourselves_is_reflexive_pronoun (line 1503) | fn ourselves_is_reflexive_pronoun() {
function you_is_pronoun (line 1512) | fn you_is_pronoun() {
function you_is_personal_pronoun (line 1516) | fn you_is_personal_pronoun() {
function you_is_singular_pronoun (line 1520) | fn you_is_singular_pronoun() {
function you_is_plural_pronoun (line 1524) | fn you_is_plural_pronoun() {
function you_is_subject_pronoun (line 1528) | fn you_is_subject_pronoun() {
function you_is_object_pronoun (line 1532) | fn you_is_object_pronoun() {
function yourself_is_pronoun (line 1536) | fn yourself_is_pronoun() {
function yourself_is_personal_pronoun (line 1540) | fn yourself_is_personal_pronoun() {
function yourself_is_singular_pronoun (line 1544) | fn yourself_is_singular_pronoun() {
function yourself_is_reflexive_pronoun (line 1548) | fn yourself_is_reflexive_pronoun() {
function he_is_pronoun (line 1557) | fn he_is_pronoun() {
function he_is_personal_pronoun (line 1561) | fn he_is_personal_pronoun() {
function he_is_singular_pronoun (line 1565) | fn he_is_singular_pronoun() {
function he_is_subject_pronoun (line 1569) | fn he_is_subject_pronoun() {
function him_is_pronoun (line 1574) | fn him_is_pronoun() {
function him_is_personal_pronoun (line 1578) | fn him_is_personal_pronoun() {
function him_is_singular_pronoun (line 1582) | fn him_is_singular_pronoun() {
function him_is_object_pronoun (line 1586) | fn him_is_object_pronoun() {
function himself_is_pronoun (line 1591) | fn himself_is_pronoun() {
function himself_is_personal_pronoun (line 1595) | fn himself_is_personal_pronoun() {
function himself_is_singular_pronoun (line 1599) | fn himself_is_singular_pronoun() {
function himself_is_reflexive_pronoun (line 1603) | fn himself_is_reflexive_pronoun() {
function she_is_pronoun (line 1612) | fn she_is_pronoun() {
function she_is_personal_pronoun (line 1616) | fn she_is_personal_pronoun() {
function she_is_singular_pronoun (line 1620) | fn she_is_singular_pronoun() {
function she_is_subject_pronoun (line 1624) | fn she_is_subject_pronoun() {
function her_is_pronoun (line 1629) | fn her_is_pronoun() {
function her_is_personal_pronoun (line 1633) | fn her_is_personal_pronoun() {
function her_is_singular_pronoun (line 1637) | fn her_is_singular_pronoun() {
function her_is_object_pronoun (line 1641) | fn her_is_object_pronoun() {
function herself_is_pronoun (line 1646) | fn herself_is_pronoun() {
function herself_is_personal_pronoun (line 1650) | fn herself_is_personal_pronoun() {
function herself_is_singular_pronoun (line 1654) | fn herself_is_singular_pronoun() {
function herself_is_reflexive_pronoun (line 1658) | fn herself_is_reflexive_pronoun() {
function it_is_pronoun (line 1667) | fn it_is_pronoun() {
function it_is_personal_pronoun (line 1671) | fn it_is_personal_pronoun() {
function it_is_singular_pronoun (line 1675) | fn it_is_singular_pronoun() {
function it_is_subject_pronoun (line 1679) | fn it_is_subject_pronoun() {
function it_is_object_pronoun (line 1683) | fn it_is_object_pronoun() {
function itself_is_pronoun (line 1688) | fn itself_is_pronoun() {
function itself_is_personal_pronoun (line 1692) | fn itself_is_personal_pronoun() {
function itself_is_singular_pronoun (line 1696) | fn itself_is_singular_pronoun() {
function itself_is_reflexive_pronoun (line 1700) | fn itself_is_reflexive_pronoun() {
function they_is_pronoun (line 1709) | fn they_is_pronoun() {
function they_is_personal_pronoun (line 1713) | fn they_is_personal_pronoun() {
function they_is_plural_pronoun (line 1717) | fn they_is_plural_pronoun() {
function they_is_subject_pronoun (line 1721) | fn they_is_subject_pronoun() {
function them_is_pronoun (line 1726) | fn them_is_pronoun() {
function them_is_personal_pronoun (line 1730) | fn them_is_personal_pronoun() {
function them_is_plural_pronoun (line 1734) | fn them_is_plural_pronoun() {
function them_is_object_pronoun (line 1738) | fn them_is_object_pronoun() {
function themselves_is_pronoun (line 1743) | fn themselves_is_pronoun() {
function themselves_is_personal_pronoun (line 1747) | fn themselves_is_personal_pronoun() {
function themselves_is_plural_pronoun (line 1751) | fn themselves_is_plural_pronoun() {
function themselves_is_reflexive_pronoun (line 1755) | fn themselves_is_reflexive_pronoun() {
function mine_is_pronoun (line 1762) | fn mine_is_pronoun() {
function ours_is_pronoun (line 1766) | fn ours_is_pronoun() {
function yours_is_pronoun (line 1770) | fn yours_is_pronoun() {
function his_is_pronoun (line 1774) | fn his_is_pronoun() {
function hers_is_pronoun (line 1778) | fn hers_is_pronoun() {
function its_is_pronoun (line 1782) | fn its_is_pronoun() {
function theirs_is_pronoun (line 1786) | fn theirs_is_pronoun() {
function archaic_pronouns (line 1792) | fn archaic_pronouns() {
function generic_pronouns (line 1801) | fn generic_pronouns() {
function relative_and_interrogative_pronouns (line 1808) | fn relative_and_interrogative_pronouns() {
function nonstandard_pronouns (line 1819) | fn nonstandard_pronouns() {
function my_is_possessive_nominal (line 1829) | fn my_is_possessive_nominal() {
function mine_is_not_possessive_nominal (line 1834) | fn mine_is_not_possessive_nominal() {
function freds_is_possessive_nominal (line 1839) | fn freds_is_possessive_nominal() {
function fred_is_not_possessive_nominal (line 1844) | fn fred_is_not_possessive_nominal() {
function dogs_is_possessive_nominal (line 1849) | fn dogs_is_possessive_nominal() {
function microsofts_is_possessive_nominal (line 1854) | fn microsofts_is_possessive_nominal() {
function big_is_positive (line 1866) | fn big_is_positive() {
function bigger_is_comparative (line 1871) | fn bigger_is_comparative() {
function biggest_is_superlative (line 1876) | fn biggest_is_superlative() {
function bigly_is_not_an_adjective_form_we_track (line 1882) | fn bigly_is_not_an_adjective_form_we_track() {
function bigger_is_comparative_adjective (line 1891) | fn bigger_is_comparative_adjective() {
function biggest_is_superlative_adjective (line 1896) | fn biggest_is_superlative_adjective() {
function the_is_determiner (line 1902) | fn the_is_determiner() {
function this_is_demonstrative_determiner (line 1906) | fn this_is_demonstrative_determiner() {
function your_is_possessive_determiner (line 1910) | fn your_is_possessive_determiner() {
function every_is_quantifier (line 1915) | fn every_is_quantifier() {
function the_isnt_quantifier (line 1920) | fn the_isnt_quantifier() {
function equipment_is_mass_noun (line 1925) | fn equipment_is_mass_noun() {
function equipment_is_non_countable_noun (line 1930) | fn equipment_is_non_countable_noun() {
function equipment_isnt_countable_noun (line 1935) | fn equipment_isnt_countable_noun() {
function lemma_walk (line 1943) | fn lemma_walk() {
function lemma_fix (line 1949) | fn lemma_fix() {
function progressive_walking (line 1955) | fn progressive_walking() {
function past_walked (line 1961) | fn past_walked() {
function simple_past_ate (line 1967) | fn simple_past_ate() {
function past_participle_eaten (line 1973) | fn past_participle_eaten() {
function third_pers_sing_walks (line 1979) | fn third_pers_sing_walks() {
FILE: harper-core/src/dict_word_metadata_orthography.rs
type Orthography (line 6) | pub enum Orthography {
type OrthographyFlagsUnderlyingType (line 30) | type OrthographyFlagsUnderlyingType = u16;
method default (line 51) | fn default() -> Self {
method from_letters (line 58) | pub fn from_letters(letters: &[char]) -> Self {
function looks_like_roman_numerals (line 148) | fn looks_like_roman_numerals(word: &[char]) -> bool {
function is_really_roman_numerals (line 167) | fn is_really_roman_numerals(word: &[char]) -> bool {
function check_roman_group (line 196) | fn check_roman_group<I: Iterator<Item = char>>(
function orth_flags (line 239) | fn orth_flags(s: &str) -> OrthFlags {
function test_lowercase_flags (line 245) | fn test_lowercase_flags() {
function test_titlecase_flags (line 258) | fn test_titlecase_flags() {
function test_allcaps_flags (line 274) | fn test_allcaps_flags() {
function test_lower_camel_flags (line 287) | fn test_lower_camel_flags() {
function test_upper_camel_flags (line 302) | fn test_upper_camel_flags() {
function test_roman_numeral_flags (line 320) | fn test_roman_numeral_flags() {
function test_single_roman_numeral_flags (line 331) | fn test_single_roman_numeral_flags() {
function empty_string_is_not_roman_numeral (line 336) | fn empty_string_is_not_roman_numeral() {
function dont_allow_mixed_case_roman_numerals (line 341) | fn dont_allow_mixed_case_roman_numerals() {
function dont_allow_looks_like_but_isnt_roman_numeral (line 346) | fn dont_allow_looks_like_but_isnt_roman_numeral() {
function australia_lexeme_is_titlecase_even_when_word_is_lowercase (line 352) | fn australia_lexeme_is_titlecase_even_when_word_is_lowercase() {
function australia_lexeme_is_titlecase_even_when_word_is_all_caps (line 357) | fn australia_lexeme_is_titlecase_even_when_word_is_all_caps() {
function australia_lexeme_is_titlecase_even_when_word_is_mixed_case (line 362) | fn australia_lexeme_is_titlecase_even_when_word_is_mixed_case() {
function db_and_kw_symbols_are_lower_camel_case (line 367) | fn db_and_kw_symbols_are_lower_camel_case() {
function am_is_lowercase_and_titlecase_and_all_caps (line 373) | fn am_is_lowercase_and_titlecase_and_all_caps() {
function reading_is_both_lowercase_and_titlecase (line 382) | fn reading_is_both_lowercase_and_titlecase() {
function ebay_and_esim_are_lower_camel (line 390) | fn ebay_and_esim_are_lower_camel() {
FILE: harper-core/src/document.rs
type Document (line 19) | pub struct Document {
method token_indices_intersecting (line 34) | pub fn token_indices_intersecting(&self, span: Span<char>) -> Vec<usiz...
method fat_tokens_intersecting (line 44) | pub fn fat_tokens_intersecting(&self, span: Span<char>) -> Vec<FatToke...
method new (line 55) | pub fn new(text: &str, parser: &impl Parser, dictionary: &impl Diction...
method new_curated (line 63) | pub fn new_curated(text: &str, parser: &impl Parser) -> Self {
method new_from_vec (line 71) | pub fn new_from_vec(
method new_plain_english_curated_chars (line 86) | pub fn new_plain_english_curated_chars(source: &[char]) -> Self {
method new_plain_english_curated (line 96) | pub fn new_plain_english_curated(text: &str) -> Self {
method new_basic_tokenize (line 105) | pub(crate) fn new_basic_tokenize(text: &str, parser: &impl Parser) -> ...
method new_plain_english (line 115) | pub fn new_plain_english(text: &str, dictionary: &impl Dictionary) -> ...
method new_markdown_curated (line 121) | pub fn new_markdown_curated(text: &str, markdown_options: MarkdownOpti...
method new_markdown_default_curated_chars (line 131) | pub fn new_markdown_default_curated_chars(chars: &[char]) -> Self {
method new_markdown_default_curated (line 141) | pub fn new_markdown_default_curated(text: &str) -> Self {
method new_markdown (line 147) | pub fn new_markdown(
method new_markdown_default (line 157) | pub fn new_markdown_default(text: &str, dictionary: &impl Dictionary) ...
method apply_fixups (line 161) | fn apply_fixups(&mut self) {
method parse (line 180) | fn parse(&mut self, dictionary: &impl Dictionary) {
method newlines_to_breaks (line 221) | fn newlines_to_breaks(&mut self) {
method condense_indices (line 236) | fn condense_indices(&mut self, indices: &[usize], stretch_len: usize) {
method get_token_at_char_index (line 273) | pub fn get_token_at_char_index(&self, char_index: usize) -> Option<&To...
method get_token (line 289) | pub fn get_token(&self, index: usize) -> Option<&Token> {
method get_token_offset (line 294) | pub fn get_token_offset(&self, base: usize, offset: isize) -> Option<&...
method tokens (line 302) | pub fn tokens(&self) -> impl Iterator<Item = &Token> + '_ {
method iter_nominal_phrases (line 306) | pub fn iter_nominal_phrases(&self) -> impl Iterator<Item = &[Token]> {
method fat_tokens (line 341) | pub fn fat_tokens(&self) -> impl Iterator<Item = FatToken> + '_ {
method get_next_word_from_offset (line 347) | pub fn get_next_word_from_offset(&self, base: usize, offset: isize) ->...
method fat_string_tokens (line 359) | pub fn fat_string_tokens(&self) -> impl Iterator<Item = FatStringToken...
method get_span_content (line 363) | pub fn get_span_content(&self, span: &Span<char>) -> &[char] {
method get_span_content_str (line 367) | pub fn get_span_content_str(&self, span: &Span<char>) -> String {
method get_full_string (line 371) | pub fn get_full_string(&self) -> String {
method get_full_content (line 375) | pub fn get_full_content(&self) -> &[char] {
method get_source (line 379) | pub fn get_source(&self) -> &[char] {
method get_tokens (line 383) | pub fn get_tokens(&self) -> &[Token] {
method match_quotes (line 392) | fn match_quotes(&mut self) {
method condense_number_suffixes (line 454) | fn condense_number_suffixes(&mut self) {
method condense_spaces (line 481) | fn condense_spaces(&mut self) {
method uncached_dotted_truncation_expr (line 527) | fn uncached_dotted_truncation_expr() -> Lrc<FirstMatchOf> {
method condense_expr (line 541) | fn condense_expr<F>(&mut self, expr: &impl Expr, edit: F)
method condense_dotted_truncations (line 558) | fn condense_dotted_truncations(&mut self) {
method condense_newlines (line 564) | fn condense_newlines(&mut self) {
method condense_dotted_initialisms (line 602) | fn condense_dotted_initialisms(&mut self) {
method condense_filename_extensions (line 649) | fn condense_filename_extensions(&mut self) {
method condense_common_top_level_domains (line 711) | fn condense_common_top_level_domains(&mut self) {
method condense_tldr (line 762) | fn condense_tldr(&mut self) {
method condense_delimited_pairs (line 821) | fn condense_delimited_pairs<F>(&mut self, is_delimiter: F, valid_pairs...
method condense_ampersand_pairs (line 877) | fn condense_ampersand_pairs(&mut self) {
method condense_slash_pairs (line 895) | fn condense_slash_pairs(&mut self) {
method uncached_ellipsis_pattern (line 915) | fn uncached_ellipsis_pattern() -> Lrc<Repeating> {
method condense_ellipsis (line 924) | fn condense_ellipsis(&mut self) {
method default (line 25) | fn default() -> Self {
method first_sentence_word (line 985) | fn first_sentence_word(&self) -> Option<&Token> {
method first_non_whitespace (line 989) | fn first_non_whitespace(&self) -> Option<&Token> {
method span (line 993) | fn span(&self) -> Option<Span<char>> {
method iter_linking_verb_indices (line 997) | fn iter_linking_verb_indices(&self) -> impl Iterator<Item = usize> + '_ {
method iter_linking_verbs (line 1001) | fn iter_linking_verbs(&self) -> impl Iterator<Item = &Token> + '_ {
method iter_chunks (line 1005) | fn iter_chunks(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {
method iter_paragraphs (line 1009) | fn iter_paragraphs(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {
method iter_headings (line 1013) | fn iter_headings(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {
method iter_sentences (line 1017) | fn iter_sentences(&self) -> impl Iterator<Item = &'_ [Token]> + '_ {
method iter_sentences_mut (line 1021) | fn iter_sentences_mut(&mut self) -> impl Iterator<Item = &'_ mut [Token]...
method fmt (line 1027) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
function assert_condensed_contractions (line 1044) | fn assert_condensed_contractions(text: &str, final_tok_count: usize) {
function simple_contraction (line 1055) | fn simple_contraction() {
function simple_contraction2 (line 1060) | fn simple_contraction2() {
function simple_contraction3 (line 1065) | fn simple_contraction3() {
function simple_contraction4 (line 1070) | fn simple_contraction4() {
function medium_contraction (line 1075) | fn medium_contraction() {
function medium_contraction2 (line 1080) | fn medium_contraction2() {
function selects_token_at_char_index (line 1085) | fn selects_token_at_char_index() {
function assert_token_count (line 1095) | fn assert_token_count(source: &str, count: usize) {
function condenses_number_suffixes (line 1103) | fn condenses_number_suffixes() {
function condenses_ie (line 1114) | fn condenses_ie() {
function condenses_eg (line 1121) | fn condenses_eg() {
function condenses_nsa (line 1127) | fn condenses_nsa() {
function parses_ellipsis (line 1132) | fn parses_ellipsis() {
function parses_long_ellipsis (line 1137) | fn parses_long_ellipsis() {
function parses_short_ellipsis (line 1142) | fn parses_short_ellipsis() {
function selects_token_at_offset (line 1147) | fn selects_token_at_offset() {
function cant_select_token_before_start (line 1156) | fn cant_select_token_before_start() {
function select_next_word_pos_offset (line 1165) | fn select_next_word_pos_offset() {
function select_next_word_neg_offset (line 1174) | fn select_next_word_neg_offset() {
function cant_select_next_word_not_from_whitespace (line 1183) | fn cant_select_next_word_not_from_whitespace() {
function cant_select_next_word_before_start (line 1192) | fn cant_select_next_word_before_start() {
function cant_select_next_word_with_punctuation_instead_of_whitespace (line 1201) | fn cant_select_next_word_with_punctuation_instead_of_whitespace() {
function cant_select_next_word_with_punctuation_after_whitespace (line 1210) | fn cant_select_next_word_with_punctuation_after_whitespace() {
function condenses_filename_extensions (line 1219) | fn condenses_filename_extensions() {
function condense_filename_extension_ok_at_start_and_end (line 1227) | fn condense_filename_extension_ok_at_start_and_end() {
function doesnt_condense_filename_extensions_with_mixed_case (line 1235) | fn doesnt_condense_filename_extensions_with_mixed_case() {
function doesnt_condense_filename_extensions_with_non_letters (line 1244) | fn doesnt_condense_filename_extensions_with_non_letters() {
function doesnt_condense_filename_extensions_longer_than_three (line 1253) | fn doesnt_condense_filename_extensions_longer_than_three() {
function condense_filename_extension_in_parens (line 1262) | fn condense_filename_extension_in_parens() {
function condense_tldr_uppercase (line 1273) | fn condense_tldr_uppercase() {
function condense_tldr_lowercase (line 1281) | fn condense_tldr_lowercase() {
function condense_tldr_mixed_case_1 (line 1288) | fn condense_tldr_mixed_case_1() {
function condense_tldr_mixed_case_2 (line 1295) | fn condense_tldr_mixed_case_2() {
function condense_tldr_pural (line 1302) | fn condense_tldr_pural() {
function condense_common_top_level_domains (line 1323) | fn condense_common_top_level_domains() {
function condense_common_top_level_domains_in_parens (line 1332) | fn condense_common_top_level_domains_in_parens() {
function doesnt_condense_unknown_top_level_domains (line 1341) | fn doesnt_condense_unknown_top_level_domains() {
function condense_r_and_d_caps (line 1349) | fn condense_r_and_d_caps() {
function condense_r_and_d_mixed_case (line 1356) | fn condense_r_and_d_mixed_case() {
function condense_r_and_d_lowercase (line 1363) | fn condense_r_and_d_lowercase() {
function dont_condense_r_and_d_with_spaces (line 1370) | fn dont_condense_r_and_d_with_spaces() {
function condense_q_and_a (line 1381) | fn condense_q_and_a() {
function dont_allow_mixed_r_and_d_with_q_and_a (line 1390) | fn dont_allow_mixed_r_and_d_with_q_and_a() {
function condense_io (line 1397) | fn condense_io() {
function finds_unmatched_quotes_in_document (line 1404) | fn finds_unmatched_quotes_in_document() {
function issue_1901 (line 1429) | fn issue_1901() {
FILE: harper-core/src/edit_distance.rs
function edit_distance_min_alloc (line 6) | pub fn edit_distance_min_alloc(
function edit_distance (line 41) | pub fn edit_distance(source: &[char], target: &[char]) -> u8 {
function assert_edit_dist (line 49) | fn assert_edit_dist(source: &str, target: &str, expected: u8) {
function simple_edit_distance_1 (line 58) | fn simple_edit_distance_1() {
function simple_edit_distance_2 (line 63) | fn simple_edit_distance_2() {
function one_edit_distance (line 68) | fn one_edit_distance() {
function zero_edit_distance (line 87) | fn zero_edit_distance() {
FILE: harper-core/src/expr/all.rs
type All (line 9) | pub struct All {
method new (line 14) | pub fn new(children: Vec<Box<dyn Expr>>) -> Self {
method add (line 18) | pub fn add(&mut self, e: impl Expr + 'static) {
method run (line 24) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/expr/anchor_end.rs
type AnchorEnd (line 9) | pub struct AnchorEnd;
method step (line 12) | fn step(&self, tokens: &[Token], cursor: usize, _source: &[char]) -> Opt...
function matches_period (line 37) | fn matches_period() {
function does_not_match_empty (line 45) | fn does_not_match_empty() {
FILE: harper-core/src/expr/anchor_start.rs
type AnchorStart (line 7) | pub struct AnchorStart;
method step (line 10) | fn step(&self, tokens: &[Token], cursor: usize, _source: &[char]) -> Opt...
function matches_first_word (line 27) | fn matches_first_word() {
function does_not_match_empty (line 35) | fn does_not_match_empty() {
FILE: harper-core/src/expr/duration_expr.rs
type DurationExpr (line 7) | pub struct DurationExpr;
method run (line 10) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
function detect_10_days (line 40) | fn detect_10_days() {
function detect_ten_days (line 47) | fn detect_ten_days() {
FILE: harper-core/src/expr/expr_map.rs
type ExprMap (line 18) | pub struct ExprMap<T>
type Row (line 25) | struct Row<T>
method default (line 37) | fn default() -> Self {
function insert (line 48) | pub fn insert(&mut self, expr: impl Expr + 'static, value: T) {
function lookup (line 56) | pub fn lookup(&self, cursor: usize, tokens: &[Token], source: &[char]) -...
method run (line 68) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/expr/filter.rs
type Filter (line 29) | pub struct Filter {
method new (line 34) | pub fn new(steps: Vec<Box<dyn Expr>>) -> Self {
method run (line 40) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/expr/first_match_of.rs
type FirstMatchOf (line 9) | pub struct FirstMatchOf {
method new (line 14) | pub fn new(exprs: Vec<Box<dyn Expr>>) -> Self {
method add (line 18) | pub fn add(&mut self, expr: impl Expr + 'static) {
method add_boxed (line 22) | pub fn add_boxed(&mut self, expr: Box<dyn Expr>) {
method run (line 28) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/expr/fixed_phrase.rs
type FixedPhrase (line 20) | pub struct FixedPhrase {
method from_phrase (line 27) | pub fn from_phrase(text: &str) -> Self {
method from_document (line 34) | pub fn from_document(doc: &Document) -> Self {
method run (line 62) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
function test_not_case_sensitive (line 74) | fn test_not_case_sensitive() {
FILE: harper-core/src/expr/longest_match_of.rs
type LongestMatchOf (line 5) | pub struct LongestMatchOf {
method new (line 10) | pub fn new(exprs: Vec<Box<dyn Expr>>) -> Self {
method add (line 14) | pub fn add(&mut self, expr: impl Expr + 'static) {
method run (line 20) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/expr/mergeable_words.rs
type PredicateFn (line 7) | type PredicateFn =
type MergeableWords (line 14) | pub struct MergeableWords {
method new (line 21) | pub fn new(
method get_merged_word (line 36) | pub fn get_merged_word(
method run (line 64) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
function predicate (line 87) | fn predicate(
function merges_open_compound_not_in_dict (line 95) | fn merges_open_compound_not_in_dict() {
function does_not_merge_open_compound_in_dict (line 107) | fn does_not_merge_open_compound_in_dict() {
function does_not_merge_invalid_compound (line 119) | fn does_not_merge_invalid_compound() {
function merges_open_compound (line 131) | fn merges_open_compound() {
function merges_hyphenated_compound (line 143) | fn merges_hyphenated_compound() {
FILE: harper-core/src/expr/mod.rs
type Expr (line 66) | pub trait Expr: LSend {
method run (line 67) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Opt...
method run (line 74) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Opt...
method run (line 89) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Opt...
method run (line 95) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Opt...
method run (line 105) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Opt...
function add (line 110) | fn add(u: usize, i: isize) -> Option<usize> {
type ExprExt (line 118) | pub trait ExprExt {
method iter_matches (line 121) | fn iter_matches<'a>(
method iter_matches_in_doc (line 127) | fn iter_matches_in_doc<'a>(
method iter_matches (line 137) | fn iter_matches<'a>(
method iter_matches_in_doc (line 155) | fn iter_matches_in_doc<'a>(
type OwnedExprExt (line 163) | pub trait OwnedExprExt {
method or (line 164) | fn or(self, other: impl Expr + 'static) -> FirstMatchOf;
method and (line 165) | fn and(self, other: impl Expr + 'static) -> All;
method and_not (line 166) | fn and_not(self, other: impl Expr + 'static) -> All;
method or_longest (line 167) | fn or_longest(self, other: impl Expr + 'static) -> LongestMatchOf;
method or (line 175) | fn or(self, other: impl Expr + 'static) -> FirstMatchOf {
method and (line 180) | fn and(self, other: impl Expr + 'static) -> All {
method and_not (line 185) | fn and_not(self, other: impl Expr + 'static) -> All {
method or_longest (line 192) | fn or_longest(self, other: impl Expr + 'static) -> LongestMatchOf {
FILE: harper-core/src/expr/optional.rs
type Optional (line 8) | pub struct Optional {
method new (line 13) | pub fn new(inner: impl Expr + 'static) -> Self {
method run (line 21) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/expr/reflexive_pronoun.rs
constant BAD_REFLEXIVE_PRONOUNS (line 9) | const BAD_REFLEXIVE_PRONOUNS: &[&str] = &[
type ReflexivePronoun (line 21) | pub struct ReflexivePronoun {
method standard (line 36) | pub fn standard() -> Self {
method with_common_errors (line 46) | pub fn with_common_errors() -> Self {
method default (line 26) | fn default() -> Self {
method run (line 54) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
constant GOOD_REFLEXIVE_PRONOUNS (line 73) | const GOOD_REFLEXIVE_PRONOUNS: &[&str] = &[
function test_pronoun (line 87) | fn test_pronoun(word: &str) {
function test_good_reflexive_pronouns (line 116) | fn test_good_reflexive_pronouns() {
function test_bad_reflexive_pronouns (line 123) | fn test_bad_reflexive_pronouns() {
function test_non_pronouns (line 131) | fn test_non_pronouns() {
function ensure_standard_ctor_includes_myself (line 139) | fn ensure_standard_ctor_includes_myself() {
function ensure_default_ctor_includes_myself (line 148) | fn ensure_default_ctor_includes_myself() {
function ensure_with_common_errors_includes_hisself (line 158) | fn ensure_with_common_errors_includes_hisself() {
function ensure_standard_ctor_excludes_hisself (line 166) | fn ensure_standard_ctor_excludes_hisself() {
function ensure_default_ctor_excludes_theirself (line 174) | fn ensure_default_ctor_excludes_theirself() {
FILE: harper-core/src/expr/repeating.rs
type Repeating (line 7) | pub struct Repeating {
method new (line 13) | pub fn new(expr: Box<dyn Expr>, required_repetitions: usize) -> Self {
method run (line 22) | fn run(&self, mut cursor: usize, tokens: &[Token], source: &[char]) -> O...
function matches_anything (line 62) | fn matches_anything() {
function does_not_match_short (line 75) | fn does_not_match_short() {
FILE: harper-core/src/expr/sequence_expr.rs
type SequenceExpr (line 12) | pub struct SequenceExpr {
method with (line 84) | pub fn with(expr: impl Expr + 'static) -> Self {
method anything (line 91) | pub fn anything() -> Self {
method any_capitalization_of (line 98) | pub fn any_capitalization_of(word: &'static str) -> Self {
method aco (line 103) | pub fn aco(word: &'static str) -> Self {
method word_set (line 108) | pub fn word_set(words: &'static [&'static str]) -> Self {
method any_word (line 113) | pub fn any_word() -> Self {
method optional (line 120) | pub fn optional(expr: impl Expr + 'static) -> Self {
method fixed_phrase (line 125) | pub fn fixed_phrase(phrase: &'static str) -> Self {
method any_of (line 132) | pub fn any_of(exprs: Vec<Box<dyn Expr>>) -> Self {
method longest_of (line 137) | pub fn longest_of(exprs: Vec<Box<dyn Expr>>) -> Self {
method whitespace (line 141) | pub fn whitespace() -> Self {
method unless (line 146) | pub fn unless(condition: impl Expr + 'static) -> Self {
method then (line 153) | pub fn then(mut self, expr: impl Expr + 'static) -> Self {
method then_boxed (line 159) | pub fn then_boxed(mut self, expr: Box<dyn Expr>) -> Self {
method then_optional (line 165) | pub fn then_optional(mut self, expr: impl Expr + 'static) -> Self {
method then_any_of (line 175) | pub fn then_any_of(mut self, exprs: Vec<Box<dyn Expr>>) -> Self {
method then_longest_of (line 184) | pub fn then_longest_of(mut self, exprs: Vec<Box<dyn Expr>>) -> Self {
method then_seq (line 191) | pub fn then_seq(mut self, mut other: Self) -> Self {
method then_word_set (line 197) | pub fn then_word_set(self, words: &'static [&'static str]) -> Self {
method t_set (line 202) | pub fn t_set(self, words: &'static [&'static str]) -> Self {
method then_whitespace (line 207) | pub fn then_whitespace(self) -> Self {
method t_ws (line 212) | pub fn t_ws(self) -> Self {
method then_whitespace_or_hyphen (line 217) | pub fn then_whitespace_or_hyphen(self) -> Self {
method t_ws_h (line 222) | pub fn t_ws_h(self) -> Self {
method then_zero_or_more (line 227) | pub fn then_zero_or_more(self, expr: impl Expr + 'static) -> Self {
method then_one_or_more (line 232) | pub fn then_one_or_more(self, expr: impl Expr + 'static) -> Self {
method then_zero_or_more_spaced (line 237) | pub fn then_zero_or_more_spaced(self, expr: impl Expr + 'static) -> Se...
method then_unless (line 251) | pub fn then_unless(self, condition: impl Expr + 'static) -> Self {
method then_anything (line 260) | pub fn then_anything(self) -> Self {
method t_any (line 267) | pub fn t_any(self) -> Self {
method then_any_word (line 274) | pub fn then_any_word(self) -> Self {
method then_any_capitalization_of (line 279) | pub fn then_any_capitalization_of(self, word: &'static str) -> Self {
method t_aco (line 284) | pub fn t_aco(self, word: &'static str) -> Self {
method then_exact_word (line 289) | pub fn then_exact_word(self, word: &'static str) -> Self {
method then_fixed_phrase (line 294) | pub fn then_fixed_phrase(self, phrase: &'static str) -> Self {
method then_word_except (line 299) | pub fn then_word_except(self, words: &'static [&'static str]) -> Self {
method then_kind (line 313) | pub fn then_kind(self, kind: TokenKind) -> Self {
method then_kind_where (line 318) | pub fn then_kind_where<F>(mut self, predicate: F) -> Self
method then_kind_except (line 330) | pub fn then_kind_except<F>(self, pred_is: F, ex: &'static [&'static st...
method then_kind_both (line 346) | pub fn then_kind_both<F1, F2>(self, pred_is_1: F1, pred_is_2: F2) -> Self
method then_kind_either (line 356) | pub fn then_kind_either<F1, F2>(self, pred_is_1: F1, pred_is_2: F2) ->...
method then_kind_neither (line 366) | pub fn then_kind_neither<F1, F2>(self, pred_isnt_1: F1, pred_isnt_2: F...
method then_kind_is_but_is_not (line 376) | pub fn then_kind_is_but_is_not<F1, F2>(self, pred_is: F1, pred_not: F2...
method then_kind_is_but_is_not_except (line 386) | pub fn then_kind_is_but_is_not_except<F1, F2>(
method then_kind_is_but_isnt_any_of (line 407) | pub fn then_kind_is_but_isnt_any_of<F1, F2>(
method then_kind_is_but_isnt_any_of_except (line 422) | pub fn then_kind_is_but_isnt_any_of_except<F1, F2>(
method then_kind_both_but_not (line 446) | pub fn then_kind_both_but_not<F1, F2, F3>(
method then_kind_any (line 461) | pub fn then_kind_any<F>(self, preds_is: &'static [F]) -> Self
method then_kind_none_of (line 470) | pub fn then_kind_none_of<F>(self, preds_isnt: &'static [F]) -> Self
method then_kind_any_except (line 479) | pub fn then_kind_any_except<F>(
method then_kind_any_or_words (line 497) | pub fn then_kind_any_or_words<F>(
method then_kind_any_but_not_except (line 515) | pub fn then_kind_any_but_not_except<F1, F2>(
method then_indefinite_article (line 604) | pub fn then_indefinite_article(self) -> Self {
method from (line 644) | fn from(step: S) -> Self {
method run (line 55) | fn run(&self, mut cursor: usize, tokens: &[Token], source: &[char]) -> O...
function test_kind_both (line 660) | fn test_kind_both() {
function test_adjective_or_determiner (line 669) | fn test_adjective_or_determiner() {
function test_noun_but_not_adjective (line 678) | fn test_noun_but_not_adjective() {
FILE: harper-core/src/expr/similar_to_phrase.rs
type SimilarToPhrase (line 6) | pub struct SimilarToPhrase {
method from_phrase (line 18) | pub fn from_phrase(text: &str, max_edit_dist: u8) -> Self {
method from_doc (line 30) | pub fn from_doc(document: &Document, max_edit_dist: u8) -> Self {
method run (line 61) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/expr/space_or_hyphen.rs
type SpaceOrHyphen (line 9) | pub struct SpaceOrHyphen;
method run (line 12) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/expr/spelled_number_expr.rs
type SpelledNumberExpr (line 9) | pub struct SpelledNumberExpr;
method run (line 12) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
function matches_single_digit (line 76) | fn matches_single_digit() {
function matches_teens (line 83) | fn matches_teens() {
function matches_tens (line 90) | fn matches_tens() {
function matches_compound_numbers (line 97) | fn matches_compound_numbers() {
function deep_thought (line 117) | fn deep_thought() {
function jacksons (line 132) | fn jacksons() {
function orwell (line 144) | fn orwell() {
function get_smart (line 154) | fn get_smart() {
function hyphens_or_spaces (line 166) | fn hyphens_or_spaces() {
function waiting_since (line 190) | fn waiting_since() {
FILE: harper-core/src/expr/step.rs
type Step (line 8) | pub trait Step: LSend {
method step (line 9) | fn step(&self, tokens: &[Token], cursor: usize, source: &[char]) -> Op...
method step (line 16) | fn step(&self, tokens: &[Token], cursor: usize, source: &[char]) -> Op...
FILE: harper-core/src/expr/time_unit_expr.rs
type TimeUnitExpr (line 15) | pub struct TimeUnitExpr;
method run (line 18) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/expr/unless_step.rs
type UnlessStep (line 7) | pub struct UnlessStep<E: Expr, S: Step> {
function new (line 17) | pub fn new(condition: E, step: S) -> Self {
method step (line 23) | fn step(&self, tokens: &[Token], cursor: usize, source: &[char]) -> Opti...
FILE: harper-core/src/expr/word_expr_group.rs
type WordExprGroup (line 12) | pub struct WordExprGroup<E>
function add (line 20) | pub fn add(&mut self, word: &str, expr: impl Expr + 'static) {
function add_word (line 33) | pub fn add_word(&mut self, word: &'static str) {
method run (line 42) | fn run(&self, cursor: usize, tokens: &[Token], source: &[char]) -> Optio...
FILE: harper-core/src/fat_token.rs
type FatToken (line 8) | pub struct FatToken {
method from (line 14) | fn from(value: FatStringToken) -> Self {
type FatStringToken (line 24) | pub struct FatStringToken {
method from (line 30) | fn from(value: FatToken) -> Self {
FILE: harper-core/src/ignored_lints/lint_context.rs
type LintContext (line 13) | pub struct LintContext {
method from_lint (line 22) | pub fn from_lint(lint: &Lint, document: &Document) -> Self {
method default_hash (line 57) | pub fn default_hash(&self) -> u64 {
FILE: harper-core/src/ignored_lints/mod.rs
type IgnoredLints (line 14) | pub struct IgnoredLints {
method new (line 19) | pub fn new() -> Self {
method append (line 24) | pub fn append(&mut self, other: Self) {
method ignore_lint (line 29) | pub fn ignore_lint(&mut self, lint: &Lint, document: &Document) {
method ignore_hash (line 37) | pub fn ignore_hash(&mut self, hash: u64) {
method is_ignored (line 41) | pub fn is_ignored(&self, lint: &Lint, document: &Document) -> bool {
method remove_ignored (line 49) | pub fn remove_ignored(&self, lints: &mut Vec<Lint>, document: &Documen...
function can_ignore_all (line 71) | fn can_ignore_all(text: String) -> bool {
function can_ignore_first (line 88) | fn can_ignore_first(text: String) -> TestResult {
function assert_ignore_lint_reduction (line 107) | fn assert_ignore_lint_reduction(source: &str, nth_lint: usize) {
function an_a (line 129) | fn an_a() {
function spelling (line 137) | fn spelling() {
FILE: harper-core/src/indefinite_article.rs
type InitialSound (line 10) | pub enum InitialSound {
function starts_with_vowel (line 21) | pub fn starts_with_vowel(word: &[char], dialect: Dialect) -> Option<Init...
function to_lower_word (line 166) | fn to_lower_word(word: &[char]) -> Cow<'_, [char]> {
function is_likely_acronym (line 178) | fn is_likely_acronym(word: &[char]) -> bool {
FILE: harper-core/src/irregular_nouns.rs
type Noun (line 4) | type Noun = (String, String);
type IrregularNouns (line 7) | pub struct IrregularNouns {
method new (line 22) | pub fn new() -> Self {
method from_json_file (line 26) | pub fn from_json_file(json: &str) -> Result<Self, serde_json::Error> {
method curated (line 50) | pub fn curated() -> Arc<Self> {
method get_plural_for_singular (line 54) | pub fn get_plural_for_singular(&self, singular: &str) -> Option<&str> {
method get_singular_for_plural (line 61) | pub fn get_singular_for_plural(&self, plural: &str) -> Option<&str> {
function uncached_inner_new (line 13) | fn uncached_inner_new() -> Arc<IrregularNouns> {
method default (line 70) | fn default() -> Self {
function can_find_irregular_plural_for_singular_lowercase (line 80) | fn can_find_irregular_plural_for_singular_lowercase() {
function can_find_irregular_plural_for_singular_uppercase (line 88) | fn can_find_irregular_plural_for_singular_uppercase() {
function can_find_singular_for_irregular_plural (line 96) | fn can_find_singular_for_irregular_plural() {
function cant_find_regular_plural (line 104) | fn cant_find_regular_plural() {
function cant_find_non_noun (line 112) | fn cant_find_non_noun() {
FILE: harper-core/src/irregular_verbs.rs
type Verb (line 4) | type Verb = (String, String, String);
type IrregularVerbs (line 7) | pub struct IrregularVerbs {
method new (line 22) | pub fn new() -> Self {
method from_json_file (line 26) | pub fn from_json_file(json: &str) -> Result<Self, serde_json::Error> {
method curated (line 56) | pub fn curated() -> Arc<Self> {
method get_past_participle_for_preterite (line 60) | pub fn get_past_participle_for_preterite(&self, preterite: &str) -> Op...
method get_lemma_for_preterite (line 67) | pub fn get_lemma_for_preterite(&self, preterite: &str) -> Option<&str> {
method get_pasts_for_lemma (line 74) | pub fn get_pasts_for_lemma(&self, lemma: &str) -> Option<(&str, &str)> {
function uncached_inner_new (line 13) | fn uncached_inner_new() -> Arc<IrregularVerbs> {
method default (line 83) | fn default() -> Self {
function can_find_irregular_past_participle_for_preterite_lowercase (line 93) | fn can_find_irregular_past_participle_for_preterite_lowercase() {
function can_find_irregular_past_participle_for_preterite_uppercase (line 101) | fn can_find_irregular_past_participle_for_preterite_uppercase() {
function can_find_irregular_past_participle_same_as_past_tense (line 109) | fn can_find_irregular_past_participle_same_as_past_tense() {
function cant_find_regular_past_participle (line 117) | fn cant_find_regular_past_participle() {
function cant_find_non_verb (line 125) | fn cant_find_non_verb() {
FILE: harper-core/src/language_detection.rs
function is_doc_likely_english (line 8) | pub fn is_doc_likely_english(doc: &Document, dict: &impl Dictionary) -> ...
function is_likely_english (line 13) | pub fn is_likely_english(toks: &[Token], source: &[char], dict: &impl Di...
function assert_not_english (line 60) | fn assert_not_english(source: &'static str) {
function assert_english (line 68) | fn assert_english(source: &'static str) {
function detects_spanish (line 77) | fn detects_spanish() {
function detects_french (line 82) | fn detects_french() {
function detects_shebang (line 89) | fn detects_shebang() {
function detects_short_english (line 95) | fn detects_short_english() {
function detects_english (line 100) | fn detects_english() {
function detects_expressive_english (line 105) | fn detects_expressive_english() {
function detects_python_fib (line 111) | fn detects_python_fib() {
function mixed_french_english_park (line 127) | fn mixed_french_english_park() {
function mixed_french_english_drunk (line 132) | fn mixed_french_english_drunk() {
function mixed_french_english_dress (line 137) | fn mixed_french_english_dress() {
function english_motto (line 144) | fn english_motto() {
FILE: harper-core/src/lexing/email_address.rs
constant MAX_EMAIL_LEN (line 8) | pub(crate) const MAX_EMAIL_LEN: usize = 254;
function lex_email_address (line 10) | pub fn lex_email_address(source: &[char]) -> Option<FoundToken> {
function validate_local_part (line 49) | fn validate_local_part(mut local_part: &[char]) -> bool {
function valid_unquoted_character (line 101) | fn valid_unquoted_character(c: char) -> bool {
function example_local_parts (line 133) | fn example_local_parts() -> impl Iterator<Item = Vec<char>> {
function example_local_parts_pass_validation (line 158) | fn example_local_parts_pass_validation() {
function test_many_example_email_addresses (line 166) | fn test_many_example_email_addresses() {
function does_not_allow_empty_domain (line 182) | fn does_not_allow_empty_domain() {
function survives_random_chars (line 196) | fn survives_random_chars() {
FILE: harper-core/src/lexing/hostname.rs
function lex_hostname_token (line 6) | pub fn lex_hostname_token(source: &[char]) -> Option<FoundToken> {
function lex_hostname (line 33) | pub fn lex_hostname(source: &[char]) -> Option<usize> {
constant COMMON_TLDS (line 61) | const COMMON_TLDS: &[&[char]] = &[
function ends_with_common_tld (line 79) | fn ends_with_common_tld(input: &[char]) -> bool {
function example_domain_parts (line 93) | pub fn example_domain_parts() -> impl Iterator<Item = Vec<char>> {
function can_parse_example_hostnames (line 115) | fn can_parse_example_hostnames() {
function hyphen_cannot_open_hostname (line 123) | fn hyphen_cannot_open_hostname() {
FILE: harper-core/src/lexing/mod.rs
type FoundToken (line 15) | pub struct FoundToken {
function lex_with (line 26) | pub fn lex_with(source: &[char], lex_fn: fn(&[char]) -> FoundToken) -> V...
function lex_weir_token (line 45) | pub fn lex_weir_token(source: &[char]) -> FoundToken {
function lex_english_token (line 65) | pub fn lex_english_token(source: &[char]) -> FoundToken {
function lex_word (line 86) | fn lex_word(source: &[char]) -> Option<FoundToken> {
function lex_number (line 108) | fn lex_number(source: &[char]) -> Option<FoundToken> {
function lex_regexish (line 151) | fn lex_regexish(src: &[char]) -> Option<FoundToken> {
function lex_hex_number (line 185) | fn lex_hex_number(source: &[char]) -> Option<FoundToken> {
function lex_long_decade (line 226) | fn lex_long_decade(source: &[char]) -> Option<FoundToken> {
function lex_plural_digit (line 253) | fn lex_plural_digit(src: &[char]) -> Option<FoundToken> {
function lex_newlines (line 280) | fn lex_newlines(source: &[char]) -> Option<FoundToken> {
function lex_tabs (line 293) | fn lex_tabs(source: &[char]) -> Option<FoundToken> {
function lex_spaces (line 306) | fn lex_spaces(source: &[char]) -> Option<FoundToken> {
function lex_punctuation (line 319) | fn lex_punctuation(source: &[char]) -> Option<FoundToken> {
function lex_quote (line 333) | fn lex_quote(source: &[char]) -> Option<FoundToken> {
function lex_catch (line 347) | fn lex_catch() -> FoundToken {
function lexes_0 (line 369) | fn lexes_0() {
function lexes_0_point_0 (line 381) | fn lexes_0_point_0() {
function lexes_00 (line 393) | fn lexes_00() {
function lexes_negative_1 (line 405) | fn lexes_negative_1() {
function lexes_positive_1 (line 417) | fn lexes_positive_1() {
function lexes_pi (line 429) | fn lexes_pi() {
function lexes_speed_of_light (line 441) | fn lexes_speed_of_light() {
function doesnt_lex_cjk_numeral (line 453) | fn doesnt_lex_cjk_numeral() {
function doesnt_lex_thai_digit (line 459) | fn doesnt_lex_thai_digit() {
function lexes_cjk_as_unlintable (line 465) | fn lexes_cjk_as_unlintable() {
function lexes_youtube_as_hostname (line 471) | fn lexes_youtube_as_hostname() {
function doesnt_lex_regex_mini_range (line 483) | fn doesnt_lex_regex_mini_range() {
function lexes_regex_one_letter (line 495) | fn lexes_regex_one_letter() {
function lexes_regex_two_letters (line 507) | fn lexes_regex_two_letters() {
function lexes_regex_digits (line 519) | fn lexes_regex_digits() {
function lexes_regex_two_alphanumeric (line 531) | fn lexes_regex_two_alphanumeric() {
function lexes_regex_one_range (line 543) | fn lexes_regex_one_range() {
function lexes_regex_letter_plus_range (line 555) | fn lexes_regex_letter_plus_range() {
function lexes_regex_range_plus_letter (line 567) | fn lexes_regex_range_plus_letter() {
function lexes_regex_two_ranges (line 579) | fn lexes_regex_two_ranges() {
function doesnt_lex_regex_broken_two_ranges (line 591) | fn doesnt_lex_regex_broken_two_ranges() {
function doesnt_lex_regex_hyphen_at_start (line 604) | fn doesnt_lex_regex_hyphen_at_start() {
function doesnt_lex_regex_hyphen_at_end (line 616) | fn doesnt_lex_regex_hyphen_at_end() {
function lexes_good_hex_numeric (line 628) | fn lexes_good_hex_numeric() {
function lexes_good_hex_lowercase (line 640) | fn lexes_good_hex_lowercase() {
function lexes_good_hex_uppercase (line 652) | fn lexes_good_hex_uppercase() {
function lexes_good_hex_mixed_case (line 664) | fn lexes_good_hex_mixed_case() {
function lexes_good_hex_lowercase_long (line 676) | fn lexes_good_hex_lowercase_long() {
function lexes_good_hex_uppercase_long (line 688) | fn lexes_good_hex_uppercase_long() {
function does_not_lex_prefix_only (line 700) | fn does_not_lex_prefix_only() {
function does_not_lex_bad_alphabetic (line 706) | fn does_not_lex_bad_alphabetic() {
function does_not_lex_bad_after_good (line 712) | fn does_not_lex_bad_after_good() {
function does_not_lex_uppercase_prefix (line 718) | fn does_not_lex_uppercase_prefix() {
function lexes_0s (line 724) | fn lexes_0s() {
function lexes_1_apostrophe_s (line 737) | fn lexes_1_apostrophe_s() {
function lexes_0s_and_1s (line 750) | fn lexes_0s_and_1s() {
function lexes_1s_and_0s_apostrophes (line 763) | fn lexes_1s_and_0s_apostrophes() {
function doesnt_lex_0s_joined_letter (line 776) | fn doesnt_lex_0s_joined_letter() {
function doesnt_lex_1s_apostrophe_joined_number (line 782) | fn doesnt_lex_1s_apostrophe_joined_number() {
function lexes_20c_decade (line 788) | fn lexes_20c_decade() {
function lexes_21c_decade (line 800) | fn lexes_21c_decade() {
function lexes_ancient_decade (line 812) | fn lexes_ancient_decade() {
function lexes_word_before_decade (line 824) | fn lexes_word_before_decade() {
function lexes_word_after_decade (line 836) | fn lexes_word_after_decade() {
function doesnt_lex_far_future_decade (line 848) | fn doesnt_lex_far_future_decade() {
function doesnt_lex_too_ancient_decade (line 854) | fn doesnt_lex_too_ancient_decade() {
function doesnt_lex_0_prefixed_decade (line 860) | fn doesnt_lex_0_prefixed_decade() {
function doesnt_lex_uppercase_decade (line 866) | fn doesnt_lex_uppercase_decade() {
function doesnt_lex_overlong_decade (line 872) | fn doesnt_lex_overlong_decade() {
function doesnt_lex_apostrophe_long_decade (line 878) | fn doesnt_lex_apostrophe_long_decade() {
function doesnt_lex_bad_apostrophe_short_decade (line 884) | fn doesnt_lex_bad_apostrophe_short_decade() {
function doesnt_lex_good_apostrophe_short_decade (line 890) | fn doesnt_lex_good_apostrophe_short_decade() {
function accepts_sentence_with_decade (line 896) | fn accepts_sentence_with_decade() {
function rejects_sentence_with_number (line 922) | fn rejects_sentence_with_number() {
function issue_1010 (line 954) | fn issue_1010() {
function lexes_full_number (line 962) | fn lexes_full_number() {
FILE: harper-core/src/lexing/url.rs
function lex_url (line 6) | pub fn lex_url(source: &[char]) -> Option<FoundToken> {
function lex_ip_schemepart (line 29) | fn lex_ip_schemepart(source: &[char]) -> Option<usize> {
function lex_login (line 60) | fn lex_login(source: &[char]) -> Option<usize> {
function lex_hostport (line 85) | fn lex_hostport(source: &[char]) -> Option<usize> {
function valid_scheme_char (line 105) | fn valid_scheme_char(c: char) -> bool {
function is_reserved (line 109) | fn is_reserved(c: char) -> bool {
function is_safe (line 113) | fn is_safe(c: char) -> bool {
function is_extra (line 117) | fn is_extra(c: char) -> bool {
function is_unreserved (line 121) | fn is_unreserved(c: char) -> bool {
function is_hex (line 125) | fn is_hex(c: char) -> bool {
function lex_escaped (line 130) | fn lex_escaped(source: &[char]) -> Option<usize> {
function lex_xchar_string (line 142) | fn lex_xchar_string(source: &[char]) -> usize {
function is_xchar_string (line 156) | fn is_xchar_string(source: &[char]) -> bool {
function is_uchar_plus_string (line 161) | fn is_uchar_plus_string(source: &[char]) -> bool {
function lex_xchar (line 180) | fn lex_xchar(source: &[char]) -> Option<usize> {
function lex_uchar (line 188) | fn lex_uchar(source: &[char]) -> Option<usize> {
function assert_consumes_full (line 202) | fn assert_consumes_full(url: &str) {
function assert_consumes_part (line 206) | fn assert_consumes_part(url: &str, len: usize) {
function consumes_google (line 213) | fn consumes_google() {
function consumes_wikipedia (line 218) | fn consumes_wikipedia() {
function consumes_youtube (line 223) | fn consumes_youtube() {
function consumes_youtube_not_garbage (line 228) | fn consumes_youtube_not_garbage() {
function consumes_with_path (line 233) | fn consumes_with_path() {
function consumes_issue_142 (line 238) | fn consumes_issue_142() {
function survives_random_chars (line 245) | fn survives_random_chars() {
FILE: harper-core/src/lib.rs
function core_version (line 70) | pub fn core_version() -> &'static str {
function remove_overlaps (line 78) | pub fn remove_overlaps(lints: &mut Vec<Lint>) {
function remove_overlaps_map (line 104) | pub fn remove_overlaps_map<K: Ord>(lint_map: &mut BTreeMap<K, Vec<Lint>>) {
function keeps_space_lint (line 180) | fn keeps_space_lint() {
function overlap_removals_have_equivalent_behavior (line 195) | fn overlap_removals_have_equivalent_behavior(s: String) {
FILE: harper-core/src/linting/a_part.rs
type APart (line 10) | pub struct APart {
method default (line 15) | fn default() -> Self {
type Unit (line 28) | type Unit = Chunk;
method expr (line 30) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 34) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 83) | fn description(&self) -> &'static str {
function allow_normal_use_of_a_part (line 94) | fn allow_normal_use_of_a_part() {
function allow_normal_use_of_apart (line 103) | fn allow_normal_use_of_apart() {
function allow_normal_use_of_a_part_of (line 108) | fn allow_normal_use_of_a_part_of() {
function allow_normal_use_of_apart_from (line 113) | fn allow_normal_use_of_apart_from() {
function allow_normal_us_of_fall_apart (line 118) | fn allow_normal_us_of_fall_apart() {
function allow_normal_use_of_far_apart (line 123) | fn allow_normal_use_of_far_apart() {
function corrects_a_part_from_to_apart_from_format (line 128) | fn corrects_a_part_from_to_apart_from_format() {
function corrects_a_part_from_to_apart_from_english (line 137) | fn corrects_a_part_from_to_apart_from_english() {
function corrects_a_part_from_to_a_part_of (line 146) | fn corrects_a_part_from_to_a_part_of() {
function corrects_apart_of_to_apart_from_cflinuxfs (line 155) | fn corrects_apart_of_to_apart_from_cflinuxfs() {
function corrects_apart_of_to_apart_from_using (line 164) | fn corrects_apart_of_to_apart_from_using() {
function corrects_apart_of_to_a_part_of_openai (line 173) | fn corrects_apart_of_to_a_part_of_openai() {
function corrects_apart_of_to_a_part_of_formly (line 182) | fn corrects_apart_of_to_a_part_of_formly() {
function corrects_far_a_part (line 191) | fn corrects_far_a_part() {
function corrects_so_far_a_part_from_being_taken (line 200) | fn corrects_so_far_a_part_from_being_taken() {
function corrects_so_far_a_part_from_version_upgrade (line 209) | fn corrects_so_far_a_part_from_version_upgrade() {
function corrects_fall_a_part (line 218) | fn corrects_fall_a_part() {
FILE: harper-core/src/linting/a_while.rs
type AWhile (line 11) | pub struct AWhile {
method default (line 16) | fn default() -> Self {
type Unit (line 50) | type Unit = Chunk;
method expr (line 52) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 56) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 71) | fn description(&self) -> &'static str {
function allow_issue_2144 (line 83) | fn allow_issue_2144() {
function fix_issue_2144 (line 95) | fn fix_issue_2144() {
function correct_in_quite_a_while (line 104) | fn correct_in_quite_a_while() {
function correct_in_a_while (line 113) | fn correct_in_a_while() {
function correct_for_awhile (line 122) | fn correct_for_awhile() {
function correct_after_awhile (line 131) | fn correct_after_awhile() {
FILE: harper-core/src/linting/addicting.rs
type Addicting (line 8) | pub struct Addicting {
method default (line 13) | fn default() -> Self {
type Unit (line 38) | type Unit = Chunk;
method expr (line 40) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 44) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 60) | fn description(&self) -> &str {
function fix_addicting (line 71) | fn fix_addicting() {
function dont_flag_addicting_object_pronoun (line 80) | fn dont_flag_addicting_object_pronoun() {
function dont_flag_addicting_reflexive_pronoun (line 85) | fn dont_flag_addicting_reflexive_pronoun() {
function fix_yet_highly_addicting (line 90) | fn fix_yet_highly_addicting() {
function dont_flag_addicting_them_on (line 99) | fn dont_flag_addicting_them_on() {
function fix_find_things_addicting_myself (line 108) | fn fix_find_things_addicting_myself() {
function dont_fix_coerced_into_addicting_themselves (line 117) | fn dont_fix_coerced_into_addicting_themselves() {
FILE: harper-core/src/linting/adjective_double_degree.rs
type AdjectiveDoubleDegree (line 8) | pub struct AdjectiveDoubleDegree {
method default (line 13) | fn default() -> Self {
type Unit (line 25) | type Unit = Chunk;
method expr (line 27) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 31) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 105) | fn description(&self) -> &'static str {
function fix_double_regular_superlative (line 116) | fn fix_double_regular_superlative() {
function fix_double_regular_comparative (line 125) | fn fix_double_regular_comparative() {
function fix_double_irregular_comparative (line 134) | fn fix_double_irregular_comparative() {
function fix_double_irregular_superlative (line 143) | fn fix_double_irregular_superlative() {
function conflicting_moster_offers_two_suggestions (line 152) | fn conflicting_moster_offers_two_suggestions() {
function conflicting_morest_offers_two_suggestions (line 165) | fn conflicting_morest_offers_two_suggestions() {
function conflicting_most_better_offers_two_suggestions (line 178) | fn conflicting_most_better_offers_two_suggestions() {
function conflicting_most_worse_offers_two_suggestions (line 191) | fn conflicting_most_worse_offers_two_suggestions() {
FILE: harper-core/src/linting/adjective_of_a.rs
type AdjectiveOfA (line 6) | pub struct AdjectiveOfA;
constant ADJECTIVE_WHITELIST (line 8) | const ADJECTIVE_WHITELIST: &[&str] = &["bad", "big", "good", "large", "l...
constant CONTEXT_WORDS (line 10) | const CONTEXT_WORDS: &[&str] = &[
constant ADJECTIVE_BLACKLIST (line 15) | const ADJECTIVE_BLACKLIST: &[&str] = &["much", "part"];
function has_context_word (line 17) | fn has_context_word(document: &Document, adj_idx: usize) -> bool {
function is_good_adjective (line 44) | fn is_good_adjective(word: &str) -> bool {
function is_bad_adjective (line 50) | fn is_bad_adjective(word: &str) -> bool {
method lint (line 57) | fn lint(&mut self, document: &Document) -> Vec<Lint> {
method description (line 157) | fn description(&self) -> &str {
function correct_large_of_a (line 168) | fn correct_large_of_a() {
function correct_bad_of_an (line 177) | fn correct_bad_of_an() {
function dont_flag_comparative (line 186) | fn dont_flag_comparative() {
function dont_flag_superlative (line 195) | fn dont_flag_superlative() {
function dont_flag_kind (line 204) | fn dont_flag_kind() {
function dont_flag_part (line 214) | fn dont_flag_part() {
function dont_flag_much (line 224) | fn dont_flag_much() {
function dont_flag_part_uppercase (line 234) | fn dont_flag_part_uppercase() {
function dont_flag_all_of (line 244) | fn dont_flag_all_of() {
function dont_flag_inside (line 254) | fn dont_flag_inside() {
function dont_flag_out (line 264) | fn dont_flag_out() {
function dont_flag_full (line 274) | fn dont_flag_full() {
function dont_flag_something (line 284) | fn dont_flag_something() {
function dont_flag_short (line 294) | fn dont_flag_short() {
function dont_flag_bottom (line 304) | fn dont_flag_bottom() {
function dont_flag_left (line 314) | fn dont_flag_left() {
function dont_flag_full_uppercase (line 320) | fn dont_flag_full_uppercase() {
function dont_flag_head (line 325) | fn dont_flag_head() {
function dont_flag_middle (line 335) | fn dont_flag_middle() {
function dont_flag_chance (line 345) | fn dont_flag_chance() {
function dont_flag_potential (line 355) | fn dont_flag_potential() {
function dont_flag_sound (line 365) | fn dont_flag_sound() {
function dont_flag_rid (line 371) | fn dont_flag_rid() {
function dont_flag_precision (line 378) | fn dont_flag_precision() {
function dont_flag_back (line 388) | fn dont_flag_back() {
function dont_flag_emblematic (line 398) | fn dont_flag_emblematic() {
function dont_flag_half (line 408) | fn dont_flag_half() {
function dont_flag_bit (line 414) | fn dont_flag_bit() {
function dont_flag_dream (line 420) | fn dont_flag_dream() {
function dont_flag_beginning (line 426) | fn dont_flag_beginning() {
function dont_flag_side (line 432) | fn dont_flag_side() {
function dont_flag_derivative (line 442) | fn dont_flag_derivative() {
function dont_flag_equivalent (line 452) | fn dont_flag_equivalent() {
function dont_flag_up (line 461) | fn dont_flag_up() {
function dont_flag_eighth (line 470) | fn dont_flag_eighth() {
function dont_flag_shy (line 479) | fn dont_flag_shy() {
function dont_flag_fun (line 488) | fn dont_flag_fun() {
function dont_flag_off (line 497) | fn dont_flag_off() {
function dont_flag_borderline_of (line 508) | fn dont_flag_borderline_of() {
function dont_flag_light (line 517) | fn dont_flag_light() {
function dont_flag_multiple (line 522) | fn dont_flag_multiple() {
function dont_flag_red (line 531) | fn dont_flag_red() {
function dont_flag_top (line 536) | fn dont_flag_top() {
function dont_flag_slack (line 541) | fn dont_flag_slack() {
function dont_flag_illustrative (line 550) | fn dont_flag_illustrative() {
function dont_flag_perspective (line 559) | fn dont_flag_perspective() {
function correct_too_large_of_a (line 568) | fn correct_too_large_of_a() {
function correct_too_long_of_a (line 577) | fn correct_too_long_of_a() {
function correct_too_big_of_a (line 586) | fn correct_too_big_of_a() {
function correct_too_vague_of_a (line 595) | fn correct_too_vague_of_a() {
function correct_too_dumb_of_a (line 604) | fn correct_too_dumb_of_a() {
function correct_how_important_of_a (line 613) | fn correct_how_important_of_a() {
function correct_that_rare_of_an (line 622) | fn correct_that_rare_of_an() {
function correct_as_important_of_a (line 631) | fn correct_as_important_of_a() {
function correct_too_short_of_a (line 640) | fn correct_too_short_of_a() {
function correct_that_common_of_a (line 649) | fn correct_that_common_of_a() {
function correct_as_great_of_an (line 658) | fn correct_as_great_of_an() {
function correct_too_uncommon_of_a (line 667) | fn correct_too_uncommon_of_a() {
FILE: harper-core/src/linting/after_later.rs
type AfterLater (line 7) | pub struct AfterLater {
method default (line 12) | fn default() -> Self {
type Unit (line 43) | type Unit = Chunk;
method expr (line 45) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 49) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 67) | fn description(&self) -> &str {
function after_90_days_later (line 78) | fn after_90_days_later() {
function after_about_30_minutes_later (line 87) | fn after_about_30_minutes_later() {
function after_14_days_later (line 96) | fn after_14_days_later() {
function after_exactly_5_minutes_later (line 105) | fn after_exactly_5_minutes_later() {
function after_22_years_later_1 (line 114) | fn after_22_years_later_1() {
function after_almost_2_years_later (line 123) | fn after_almost_2_years_later() {
function after_2_years_later (line 132) | fn after_2_years_later() {
function after_a_year_later (line 141) | fn after_a_year_later() {
function after_22_years_later_2 (line 150) | fn after_22_years_later_2() {
FILE: harper-core/src/linting/all_hell_break_loose.rs
type AllHellBreakLoose (line 7) | pub struct AllHellBreakLoose {
method default (line 12) | fn default() -> Self {
type Unit (line 26) | type Unit = Chunk;
method match_to_lint (line 28) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 42) | fn description(&self) -> &str {
method expr (line 46) | fn expr(&self) -> &dyn Expr {
function fix_break (line 57) | fn fix_break() {
function fix_breaks (line 66) | fn fix_breaks() {
function fix_breaking (line 75) | fn fix_breaking() {
function fix_broke (line 84) | fn fix_broke() {
function fix_broken (line 93) | fn fix_broken() {
FILE: harper-core/src/linting/all_intents_and_purposes.rs
type AllIntentsAndPurposes (line 8) | pub struct AllIntentsAndPurposes {
method default (line 13) | fn default() -> Self {
type Unit (line 43) | type Unit = Chunk;
method expr (line 45) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 49) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 91) | fn description(&self) -> &'static str {
function fix_for_intended (line 104) | fn fix_for_intended() {
function fix_for_intense (line 113) | fn fix_for_intense() {
function fix_for_intensive (line 122) | fn fix_for_intensive() {
function fix_for_intrinsic_purposes (line 131) | fn fix_for_intrinsic_purposes() {
function fix_in_intense_purposes (line 140) | fn fix_in_intense_purposes() {
function fix_to_intensive_purposes (line 149) | fn fix_to_intensive_purposes() {
function fix_at_intents_and (line 160) | fn fix_at_intents_and() {
function fix_by_intents_and (line 169) | fn fix_by_intents_and() {
function fix_for_extents_and (line 178) | fn fix_for_extents_and() {
function dont_flag_for_intents_and (line 187) | fn dont_flag_for_intents_and() {
function fix_from_intents_and (line 195) | fn fix_from_intents_and() {
function fix_in_intents_and (line 204) | fn fix_in_intents_and() {
function fix_on_intents_and (line 213) | fn fix_on_intents_and() {
function fix_through_intents_and (line 222) | fn fix_through_intents_and() {
function fix_to_extents_and (line 231) | fn fix_to_extents_and() {
function dont_flag_to_intents_and (line 240) | fn dont_flag_to_intents_and() {
function fix_with_intents_and (line 248) | fn fix_with_intents_and() {
function fix_by_intensive_purposes (line 259) | fn fix_by_intensive_purposes() {
function fix_for_intense_and (line 268) | fn fix_for_intense_and() {
function fix_in_intensive_purposes (line 277) | fn fix_in_intensive_purposes() {
function fix_to_intense_and (line 286) | fn fix_to_intense_and() {
function dont_flag_for_basically_all_intents_and_purposes (line 297) | fn dont_flag_for_basically_all_intents_and_purposes() {
function dont_flag_for_nearly_all_intents_and_purposes (line 305) | fn dont_flag_for_nearly_all_intents_and_purposes() {
function dont_flag_for_pretty_much_all_intents_and_purposes (line 313) | fn dont_flag_for_pretty_much_all_intents_and_purposes() {
function false_positive_for_99_percent_of_all_intents_and_purposes (line 324) | fn false_positive_for_99_percent_of_all_intents_and_purposes() {
function false_positive_for_us_constitution_space (line 334) | fn false_positive_for_us_constitution_space() {
function false_positive_for_us_constitution_line_break (line 343) | fn false_positive_for_us_constitution_line_break() {
FILE: harper-core/src/linting/allow_to.rs
type AllowTo (line 7) | pub struct AllowTo {
method default (line 12) | fn default() -> Self {
type Unit (line 26) | type Unit = Chunk;
method expr (line 28) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 32) | fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {
method description (line 50) | fn description(&self) -> &'static str {
function flag_allow_to (line 61) | fn flag_allow_to() {
function flag_allowing_to (line 70) | fn flag_allowing_to() {
function flag_allows_to (line 79) | fn flag_allows_to() {
function dont_flag_allowed_to (line 88) | fn dont_flag_allowed_to() {
function dont_flag_allow_pronoun_to (line 96) | fn dont_flag_allow_pronoun_to() {
function dont_flag_allow_noun_to (line 104) | fn dont_flag_allow_noun_to() {
function dont_flag_allow_np_to (line 112) | fn dont_flag_allow_np_to() {
FILE: harper-core/src/linting/am_in_the_morning.rs
type AmInTheMorning (line 9) | pub struct AmInTheMorning {
method default (line 14) | fn default() -> Self {
type Unit (line 44) | type Unit = Chunk;
method expr (line 46) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 50) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 70) | fn description(&self) -> &'static str {
function flag_at_4am_in_the_morning (line 81) | fn flag_at_4am_in_the_morning() {
function fix_at_4am_in_the_morning (line 86) | fn fix_at_4am_in_the_morning() {
function flag_at_4_am_in_the_morning (line 91) | fn flag_at_4_am_in_the_morning() {
function fix_at_4_am_in_the_morning (line 96) | fn fix_at_4_am_in_the_morning() {
function flag_at_4am_in_the_morning_caps (line 105) | fn flag_at_4am_in_the_morning_caps() {
function fix_at_4am_in_the_morning_caps (line 110) | fn fix_at_4am_in_the_morning_caps() {
function flag_at_4_am_in_the_morning_caps (line 115) | fn flag_at_4_am_in_the_morning_caps() {
function fix_at_4_am_in_the_morning_caps (line 120) | fn fix_at_4_am_in_the_morning_caps() {
function at_4_a_dot_m_dot_in_the_morning (line 129) | fn at_4_a_dot_m_dot_in_the_morning() {
function fix_at_4_a_dot_m_dot_in_the_morning (line 134) | fn fix_at_4_a_dot_m_dot_in_the_morning() {
function fix_real_world_1_am_in_the_morning (line 145) | fn fix_real_world_1_am_in_the_morning() {
function fix_real_world_3am_in_the_morning (line 159) | fn fix_real_world_3am_in_the_morning() {
function fix_real_world_3am_at_night (line 173) | fn fix_real_world_3am_at_night() {
function fix_real_world_9pm_at_night (line 187) | fn fix_real_world_9pm_at_night() {
function fix_real_world_3_30_am_in_the_morning (line 201) | fn fix_real_world_3_30_am_in_the_morning() {
function fix_real_world_5_pm_in_the_afternoon_caps_dots (line 215) | fn fix_real_world_5_pm_in_the_afternoon_caps_dots() {
function fix_real_world_5_pm_in_the_afternoon_caps (line 229) | fn fix_real_world_5_pm_in_the_afternoon_caps() {
function fix_real_world_6_pm_in_the_evening (line 243) | fn fix_real_world_6_pm_in_the_evening() {
function fix_real_world_4_am_in_the_morning (line 257) | fn fix_real_world_4_am_in_the_morning() {
FILE: harper-core/src/linting/amounts_for.rs
type AmountsFor (line 9) | pub struct AmountsFor {
method default (line 14) | fn default() -> Self {
type Unit (line 36) | type Unit = Chunk;
method expr (line 38) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 42) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 90) | fn description(&self) -> &str {
function corrects_that_amounts_for_to_amounts_to_entire_value (line 101) | fn corrects_that_amounts_for_to_amounts_to_entire_value() {
function corrects_that_amounts_for_to_amounts_to_percent (line 110) | fn corrects_that_amounts_for_to_amounts_to_percent() {
function corrects_that_amounts_for_to_accounts_for_setting_up (line 119) | fn corrects_that_amounts_for_to_accounts_for_setting_up() {
function corrects_which_amounts_for_to_accounts_for_16k (line 128) | fn corrects_which_amounts_for_to_accounts_for_16k() {
function corrects_this_amounts_for_to_accounts_for_large_part (line 137) | fn corrects_this_amounts_for_to_accounts_for_large_part() {
function corrects_they_amount_for_to_amount_to_16kb (line 146) | fn corrects_they_amount_for_to_amount_to_16kb() {
function corrects_which_amounts_for_to_amounts_to_10_minutes (line 155) | fn corrects_which_amounts_for_to_amounts_to_10_minutes() {
function corrects_it_amounts_for_to_amounts_to_redefinition (line 164) | fn corrects_it_amounts_for_to_amounts_to_redefinition() {
function corrects_they_amount_for_to_amount_to_nothing (line 173) | fn corrects_they_amount_for_to_amount_to_nothing() {
function would_amount_for_to_amount_to_api_requests (line 182) | fn would_amount_for_to_amount_to_api_requests() {
function will_amount_for_to_amount_to_relationships (line 191) | fn will_amount_for_to_amount_to_relationships() {
function should_amount_for_to_amount_to_half_pack (line 200) | fn should_amount_for_to_amount_to_half_pack() {
function can_amount_for_to_amount_to_draw_calls (line 209) | fn can_amount_for_to_amount_to_draw_calls() {
FILE: harper-core/src/linting/an_a.rs
type AnA (line 8) | pub struct AnA {
method new (line 13) | pub fn new(dialect: Dialect) -> Self {
method lint (line 19) | fn lint(&mut self, document: &Document) -> Vec<Lint> {
method description (line 89) | fn description(&self) -> &'static str {
function detects_html_as_vowel (line 101) | fn detects_html_as_vowel() {
function detects_llm_as_vowel (line 106) | fn detects_llm_as_vowel() {
function detects_llm_hyphen_as_vowel (line 111) | fn detects_llm_hyphen_as_vowel() {
function detects_euler_as_vowel (line 120) | fn detects_euler_as_vowel() {
function capitalized_fourier (line 130) | fn capitalized_fourier() {
function once_over (line 139) | fn once_over() {
function issue_196 (line 144) | fn issue_196() {
function allows_lowercase_vowels (line 153) | fn allows_lowercase_vowels() {
function allows_lowercase_consonants (line 158) | fn allows_lowercase_consonants() {
function disallows_lowercase_vowels (line 163) | fn disallows_lowercase_vowels() {
function disallows_lowercase_consonants (line 168) | fn disallows_lowercase_consonants() {
function allows_uppercase_vowels (line 173) | fn allows_uppercase_vowels() {
function allows_uppercase_consonants (line 178) | fn allows_uppercase_consonants() {
function disallows_uppercase_vowels (line 183) | fn disallows_uppercase_vowels() {
function disallows_uppercase_consonants (line 188) | fn disallows_uppercase_consonants() {
function disallows_a_interface (line 193) | fn disallows_a_interface() {
function allow_issue_751 (line 202) | fn allow_issue_751() {
function allow_an_mp_and_an_mp3 (line 211) | fn allow_an_mp_and_an_mp3() {
function disallow_a_mp_and_a_mp3 (line 216) | fn disallow_a_mp_and_a_mp3() {
function recognize_acronyms (line 221) | fn recognize_acronyms() {
function dont_misrecognize_as_acronym (line 248) | fn dont_misrecognize_as_acronym() {
function a_udev (line 257) | fn a_udev() {
function an_mdns (line 262) | fn an_mdns() {
function an_rflink (line 267) | fn an_rflink() {
function an_ffmpeg (line 272) | fn an_ffmpeg() {
function a_honey (line 281) | fn a_honey() {
function an_onedrive (line 286) | fn an_onedrive() {
function a_ubiquiti (line 291) | fn a_ubiquiti() {
function an_honest (line 300) | fn an_honest() {
function dont_flag_an_herb_for_american (line 305) | fn dont_flag_an_herb_for_american() {
function dont_flag_a_herb_for_british (line 310) | fn dont_flag_a_herb_for_british() {
function correct_an_herb_for_australian (line 315) | fn correct_an_herb_for_australian() {
function correct_a_herb_for_canadian (line 320) | fn correct_a_herb_for_canadian() {
function dont_flag_a_sql (line 325) | fn dont_flag_a_sql() {
function dont_flag_an_sql (line 330) | fn dont_flag_an_sql() {
function allow_an_and_a_for_led_2550 (line 335) | fn allow_an_and_a_for_led_2550() {
FILE: harper-core/src/linting/and_in.rs
type AndIn (line 6) | pub struct AndIn {
method default (line 11) | fn default() -> Self {
type Unit (line 19) | type Unit = Chunk;
method expr (line 21) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 25) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 42) | fn description(&self) -> &str {
function dont_flag_an_in_house (line 53) | fn dont_flag_an_in_house() {
function dont_flag_an_in_memory (line 61) | fn dont_flag_an_in_memory() {
function dont_flag_an_in_the_moment (line 69) | fn dont_flag_an_in_the_moment() {
function fix_an_in_to_and_in (line 77) | fn fix_an_in_to_and_in() {
function dont_flag_an_in_with_company (line 87) | fn dont_flag_an_in_with_company() {
FILE: harper-core/src/linting/and_the_like.rs
type AndTheLike (line 8) | pub struct AndTheLike {
method default (line 13) | fn default() -> Self {
type Unit (line 39) | type Unit = Chunk;
method expr (line 41) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 45) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 68) | fn description(&self) -> &str {
function dont_flag_and_the_like (line 79) | fn dont_flag_and_the_like() {
function dont_flag_or_the_like (line 87) | fn dont_flag_or_the_like() {
function flag_an_the_likes (line 95) | fn flag_an_the_likes() {
function flag_and_alike (line 104) | fn flag_and_alike() {
function flag_and_alikes (line 113) | fn flag_and_alikes() {
function flag_and_the_alike (line 122) | fn flag_and_the_alike() {
function flag_and_the_likes (line 131) | fn flag_and_the_likes() {
function flag_or_alike (line 140) | fn flag_or_alike() {
function flag_or_alikes (line 149) | fn flag_or_alikes() {
function flag_or_the_likes (line 158) | fn flag_or_the_likes() {
FILE: harper-core/src/linting/another_thing_coming.rs
type AnotherThingComing (line 9) | pub struct AnotherThingComing {
method default (line 14) | fn default() -> Self {
type Unit (line 23) | type Unit = Chunk;
method expr (line 25) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 29) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 42) | fn description(&self) -> &str {
function fix_have_another_think_coming (line 53) | fn fix_have_another_think_coming() {
function fix_has_another_think_coming (line 62) | fn fix_has_another_think_coming() {
function fix_got_another_think_coming (line 72) | fn fix_got_another_think_coming() {
function fix_had_another_think_coming (line 81) | fn fix_had_another_think_coming() {
FILE: harper-core/src/linting/another_think_coming.rs
type AnotherThinkComing (line 9) | pub struct AnotherThinkComing {
method default (line 14) | fn default() -> Self {
type Unit (line 23) | type Unit = Chunk;
method expr (line 25) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 29) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 42) | fn description(&self) -> &str {
function fix_got_another_thing_coming (line 53) | fn fix_got_another_thing_coming() {
function fix_has_another_thing_coming (line 62) | fn fix_has_another_thing_coming() {
function fix_have_another_thing_coming (line 71) | fn fix_have_another_thing_coming() {
function fix_had_another_thing_coming (line 80) | fn fix_had_another_thing_coming() {
FILE: harper-core/src/linting/apart_from.rs
type ApartFrom (line 7) | pub struct ApartFrom {
method default (line 12) | fn default() -> Self {
type Unit (line 22) | type Unit = Chunk;
method expr (line 24) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 28) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 43) | fn description(&self) -> &'static str {
function corrects_basic_typo (line 54) | fn corrects_basic_typo() {
function corrects_title_case (line 63) | fn corrects_title_case() {
function corrects_all_caps (line 72) | fn corrects_all_caps() {
function corrects_with_comma (line 81) | fn corrects_with_comma() {
function corrects_with_newline (line 90) | fn corrects_with_newline() {
function corrects_extra_spacing (line 99) | fn corrects_extra_spacing() {
function allows_correct_phrase (line 108) | fn allows_correct_phrase() {
function ignores_hyphenated (line 117) | fn ignores_hyphenated() {
function ignores_split_by_comma (line 126) | fn ignores_split_by_comma() {
function ignores_unrelated_form_usage (line 135) | fn ignores_unrelated_form_usage() {
FILE: harper-core/src/linting/ask_no_preposition.rs
type AskNoPreposition (line 10) | pub struct AskNoPreposition {
method default (line 15) | fn default() -> Self {
type Unit (line 33) | type Unit = Chunk;
method expr (line 35) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 39) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 58) | fn description(&self) -> &str {
function flags_ask (line 69) | fn flags_ask() {
function flags_ask_all_caps (line 78) | fn flags_ask_all_caps() {
function flags_tell (line 87) | fn flags_tell() {
function ignores_correct_usage (line 96) | fn ignores_correct_usage() {
function flags_ask_us (line 105) | fn flags_ask_us() {
function flags_asks_him (line 114) | fn flags_asks_him() {
function flags_asked_me (line 123) | fn flags_asked_me() {
function flags_told_one (line 132) | fn flags_told_one() {
function flags_telling_it (line 141) | fn flags_telling_it() {
function flags_tells_them (line 150) | fn flags_tells_them() {
function flags_telling_him (line 159) | fn flags_telling_him() {
function flags_asking_you (line 168) | fn flags_asking_you() {
function ignores_ask_question (line 177) | fn ignores_ask_question() {
function ignores_told_to_leave (line 186) | fn ignores_told_to_leave() {
function ignores_tell_us (line 195) | fn ignores_tell_us() {
function ignores_ask_about (line 200) | fn ignores_ask_about() {
FILE: harper-core/src/linting/avoid_curses.rs
type AvoidCurses (line 8) | pub struct AvoidCurses {
method default (line 13) | fn default() -> Self {
type Unit (line 21) | type Unit = Chunk;
method expr (line 23) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 27) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 246) | fn description(&self) -> &'static str {
function detects_shit (line 257) | fn detects_shit() {
function fix_shit (line 266) | fn fix_shit() {
function fix_shit_titlecase (line 271) | fn fix_shit_titlecase() {
function fix_shit_allcaps (line 276) | fn fix_shit_allcaps() {
function fix_f_word_to_all_asterisks (line 281) | fn fix_f_word_to_all_asterisks() {
function fix_shit_with_single_asterisk (line 290) | fn fix_shit_with_single_asterisk() {
function fix_shite_all_caps_with_single_asterisk (line 295) | fn fix_shite_all_caps_with_single_asterisk() {
FILE: harper-core/src/linting/back_in_the_day.rs
type BackInTheDay (line 14) | pub struct BackInTheDay {
method default (line 21) | fn default() -> Self {
type Unit (line 38) | type Unit = Chunk;
method expr (line 40) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 44) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 66) | fn description(&self) -> &'static str {
function detects_gem_update_case (line 77) | fn detects_gem_update_case() {
function detects_install_case (line 86) | fn detects_install_case() {
function detects_composer_json_case (line 95) | fn detects_composer_json_case() {
function detects_version_release_case (line 104) | fn detects_version_release_case() {
function avoids_false_positive_springfox (line 113) | fn avoids_false_positive_springfox() {
function avoids_false_positive_ie (line 122) | fn avoids_false_positive_ie() {
function avoids_false_positive_code_usage (line 131) | fn avoids_false_positive_code_usage() {
function catches_uppercase (line 139) | fn catches_uppercase() {
function catches_lowercase (line 148) | fn catches_lowercase() {
function doesnt_catch_false_positive_of (line 157) | fn doesnt_catch_false_positive_of() {
function doesnt_catch_false_positive_when (line 166) | fn doesnt_catch_false_positive_when() {
function catches_comma_when (line 175) | fn catches_comma_when() {
function doesnt_catch_false_positive_before (line 184) | fn doesnt_catch_false_positive_before() {
function catches_comma_before (line 193) | fn catches_comma_before() {
function doesnt_catch_qualified_days (line 202) | fn doesnt_catch_qualified_days() {
FILE: harper-core/src/linting/be_allowed.rs
type BeAllowed (line 8) | pub struct BeAllowed {
method default (line 13) | fn default() -> Self {
type Unit (line 47) | type Unit = Chunk;
method expr (line 49) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 53) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 71) | fn description(&self) -> &'static str {
function corrects_basic_sentence (line 83) | fn corrects_basic_sentence() {
function corrects_first_person_subject (line 92) | fn corrects_first_person_subject() {
function corrects_plural_subject (line 101) | fn corrects_plural_subject() {
function corrects_with_intro_clause (line 110) | fn corrects_with_intro_clause() {
function corrects_contracted_form (line 119) | fn corrects_contracted_form() {
function corrects_all_caps (line 128) | fn corrects_all_caps() {
function corrects_with_trailing_clause (line 137) | fn corrects_with_trailing_clause() {
function corrects_with_modal_context (line 146) | fn corrects_with_modal_context() {
function leaves_correct_phrase_untouched (line 155) | fn leaves_correct_phrase_untouched() {
function leaves_other_verbs_alone (line 164) | fn leaves_other_verbs_alone() {
function leaves_similar_sequence_without_to (line 173) | fn leaves_similar_sequence_without_to() {
FILE: harper-core/src/linting/be_worried.rs
type BeWorried (line 11) | pub struct BeWorried {
method default (line 16) | fn default() -> Self {
type Unit (line 38) | type Unit = Chunk;
method expr (line 40) | fn expr(&self) -> &dyn Expr {
method match_to_lint_with_context (line 44) | fn match_to_lint_with_context(
method description (line 74) | fn description(&self) -> &'static str {
function he_is (line 88) | fn he_is() {
function he_was (line 97) | fn he_was() {
function i_am (line 106) | fn i_am() {
function i_was (line 115) | fn i_was() {
function i_were (line 124) | fn i_were() {
function they_are (line 133) | fn they_are() {
function theyre_worry (line 142) | fn theyre_worry() {
function we_are (line 151) | fn we_are() {
function were (line 160) | fn were() {
function you_are (line 169) | fn you_are() {
function youre (line 178) | fn youre() {
function dont_flag_it_is (line 187) | fn dont_flag_it_is() {
function dont_flag_it_was (line 195) | fn dont_flag_it_was() {
function dont_flag_she_was_worry_free (line 203) | fn dont_flag_she_was_worry_free() {
function dont_flag_theyre_worry_free (line 208) | fn dont_flag_theyre_worry_free() {
function dont_flag_worry_warts (line 216) | fn dont_flag_worry_warts() {
function dont_flag_were_worry_space_free (line 224) | fn dont_flag_were_worry_space_free() {
function cant_fix_edge_case_yet (line 233) | fn cant_fix_edge_case_yet() {
FILE: harper-core/src/linting/behind_the_scenes.rs
type BehindTheScenes (line 7) | pub struct BehindTheScenes {
method default (line 12) | fn default() -> Self {
type Unit (line 24) | type Unit = Chunk;
method description (line 26) | fn description(&self) -> &str {
method expr (line 30) | fn expr(&self) -> &dyn Expr {
method match_to_lint_with_context (line 34) | fn match_to_lint_with_context(
function pluralize_work_bts (line 69) | fn pluralize_work_bts() {
function pluralize_and_hyphenate (line 79) | fn pluralize_and_hyphenate() {
function dont_flag_when_hyphenated_to_previous_word (line 88) | fn dont_flag_when_hyphenated_to_previous_word() {
function pluralize_bts_processing (line 96) | fn pluralize_bts_processing() {
FILE: harper-core/src/linting/best_of_all_time.rs
type BestOfAllTime (line 5) | pub struct BestOfAllTime {
method default (line 10) | fn default() -> Self {
type Unit (line 44) | type Unit = Sentence;
method expr (line 46) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 50) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 66) | fn description(&self) -> &'static str {
function dont_flag_list_of_all_times (line 78) | fn dont_flag_list_of_all_times() {
function fix_after_best (line 87) | fn fix_after_best() {
function fix_after_greatest (line 96) | fn fix_after_greatest() {
function fix_after_biggest (line 105) | fn fix_after_biggest() {
function fix_after_most_influential (line 114) | fn fix_after_most_influential() {
function dont_flag_sum_of_all_times (line 123) | fn dont_flag_sum_of_all_times() {
function dont_flag_history_stacks_of_all_times (line 132) | fn dont_flag_history_stacks_of_all_times() {
function fix_after_favorite (line 141) | fn fix_after_favorite() {
function fix_after_favourite (line 150) | fn fix_after_favourite() {
function fix_top_out_of_vocabulary (line 159) | fn fix_top_out_of_vocabulary() {
function fix_compound_noun (line 168) | fn fix_compound_noun() {
function fix_containing_commas (line 177) | fn fix_containing_commas() {
FILE: harper-core/src/linting/boring_words.rs
type BoringWords (line 10) | pub struct BoringWords {
method default (line 15) | fn default() -> Self {
type Unit (line 29) | type Unit = Chunk;
method expr (line 31) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 35) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 54) | fn description(&self) -> &'static str {
FILE: harper-core/src/linting/bought.rs
type Bought (line 7) | pub struct Bought {
method is_subject_pronoun_like (line 52) | fn is_subject_pronoun_like(token: &Token, source: &[char]) -> bool {
method default (line 12) | fn default() -> Self {
type Unit (line 25) | type Unit = Chunk;
method expr (line 27) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 31) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 46) | fn description(&self) -> &'static str {
function corrects_he_bough (line 81) | fn corrects_he_bough() {
function corrects_she_never_bough (line 90) | fn corrects_she_never_bough() {
function corrects_they_already_bough (line 99) | fn corrects_they_already_bough() {
function corrects_we_have_bough (line 108) | fn corrects_we_have_bough() {
function corrects_they_have_never_bough (line 117) | fn corrects_they_have_never_bough() {
function corrects_ive_bough (line 126) | fn corrects_ive_bough() {
function corrects_wed_bough (line 135) | fn corrects_wed_bough() {
function no_lint_for_tree_bough (line 144) | fn no_lint_for_tree_bough() {
function no_lint_for_he_bought (line 149) | fn no_lint_for_he_bought() {
function no_lint_for_plural_boughs (line 154) | fn no_lint_for_plural_boughs() {
FILE: harper-core/src/linting/brand_brandish.rs
type BrandBrandish (line 7) | pub struct BrandBrandish {
method default (line 12) | fn default() -> Self {
type Unit (line 24) | type Unit = Chunk;
method expr (line 26) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 30) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 66) | fn description(&self) -> &str {
function correct_brandish_a_traitor (line 76) | fn correct_brandish_a_traitor() {
function correct_brandish_a_criminal (line 85) | fn correct_brandish_a_criminal() {
function correct_brandish_as_a (line 94) | fn correct_brandish_as_a() {
function correct_brandish_an_offender (line 103) | fn correct_brandish_an_offender() {
function correct_brandish_with_nicknames (line 112) | fn correct_brandish_with_nicknames() {
function correct_brandish_as_a_aymbol (line 121) | fn correct_brandish_as_a_aymbol() {
function correct_brandish_as_illegal (line 130) | fn correct_brandish_as_illegal() {
function correct_brandish_with_nickname (line 139) | fn correct_brandish_with_nickname() {
function correct_brandish_with_label (line 148) | fn correct_brandish_with_label() {
function correct_brandished_us (line 157) | fn correct_brandished_us() {
function correct_brandishing_him (line 166) | fn correct_brandishing_him() {
function correct_brandish_us (line 175) | fn correct_brandish_us() {
function correct_brandished_him (line 184) | fn correct_brandished_him() {
function correct_brandishes_him (line 193) | fn correct_brandishes_him() {
FILE: harper-core/src/linting/by_accident.rs
type ByAccident (line 12) | pub struct ByAccident {
method default (line 17) | fn default() -> Self {
type Unit (line 33) | type Unit = Chunk;
method description (line 35) | fn description(&self) -> &str {
method expr (line 39) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 43) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
function fix_on_accident (line 66) | fn fix_on_accident() {
function fix_on_complete_accident (line 75) | fn fix_on_complete_accident() {
function fix_on_happy_accident (line 84) | fn fix_on_happy_accident() {
function fix_on_literal_accident (line 93) | fn fix_on_literal_accident() {
function fix_on_mere_accident (line 102) | fn fix_on_mere_accident() {
function fix_on_pure_accident (line 111) | fn fix_on_pure_accident() {
function fix_on_sheer_accident (line 120) | fn fix_on_sheer_accident() {
function fix_on_total_accident (line 129) | fn fix_on_total_accident() {
FILE: harper-core/src/linting/call_them.rs
type CallThem (line 10) | pub struct CallThem {
method default (line 15) | fn default() -> Self {
type Unit (line 45) | type Unit = Chunk;
method expr (line 47) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 51) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 64) | fn description(&self) -> &'static str {
function prefer_plug_and_receptacle (line 78) | fn prefer_plug_and_receptacle() {
function builtins_id (line 87) | fn builtins_id() {
function non_modal_dialogue (line 96) | fn non_modal_dialogue() {
function prefer_to_call_them (line 105) | fn prefer_to_call_them() {
function called_them_allies (line 114) | fn called_them_allies() {
function character_development (line 123) | fn character_development() {
function fate_or_time (line 132) | fn fate_or_time() {
function abstract_latte_art (line 141) | fn abstract_latte_art() {
function sounding_boards (line 150) | fn sounding_boards() {
function calling_them_disaster (line 159) | fn calling_them_disaster() {
function battle_of_boxes (line 168) | fn battle_of_boxes() {
function called_her_shinnasan (line 177) | fn called_her_shinnasan() {
function calling_it_otp (line 186) | fn calling_it_otp() {
function call_it_procrastination (line 195) | fn call_it_procrastination() {
function call_her_important (line 204) | fn call_her_important() {
function call_him_kindles (line 213) | fn call_him_kindles() {
function call_them_defenders (line 222) | fn call_them_defenders() {
function call_it_magical (line 231) | fn call_it_magical() {
function forward_lateral (line 240) | fn forward_lateral() {
function calling_best_friend (line 249) | fn calling_best_friend() {
function calling_everyone_titles (line 258) | fn calling_everyone_titles() {
function called_as_he (line 267) | fn called_as_he() {
function calls_him_bob (line 276) | fn calls_him_bob() {
function pliny_called_it (line 285) | fn pliny_called_it() {
function students_call_you (line 294) | fn students_call_you() {
function paradoxical_reaction (line 303) | fn paradoxical_reaction() {
function rust_module (line 312) | fn rust_module() {
function want_to_do (line 320) | fn want_to_do() {
FILE: harper-core/src/linting/cant.rs
type Cant (line 9) | pub struct Cant {
method default (line 14) | fn default() -> Self {
type Unit (line 35) | type Unit = Chunk;
method expr (line 37) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 41) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 60) | fn description(&self) -> &'static str {
function corrects_pronoun_cant (line 71) | fn corrects_pronoun_cant() {
function corrects_proper_noun_cant (line 80) | fn corrects_proper_noun_cant() {
function corrects_common_noun_cant (line 89) | fn corrects_common_noun_cant() {
function corrects_cant_pronoun (line 99) | fn corrects_cant_pronoun() {
function dont_flag_if_cant_is_part_of_noun_phrase (line 108) | fn dont_flag_if_cant_is_part_of_noun_phrase() {
function dont_flag_cant_project (line 113) | fn dont_flag_cant_project() {
function corrects_cant_verb (line 123) | fn corrects_cant_verb() {
function dont_flag_legit_noun_sense (line 132) | fn dont_flag_legit_noun_sense() {
FILE: harper-core/src/linting/capitalize_personal_pronouns.rs
type CapitalizePersonalPronouns (line 7) | pub struct CapitalizePersonalPronouns;
method lint (line 10) | fn lint(&mut self, document: &crate::Document) -> Vec<Lint> {
method description (line 42) | fn description(&self) -> &'static str {
function start (line 54) | fn start() {
function end (line 59) | fn end() {
function middle (line 68) | fn middle() {
function issue_365 (line 77) | fn issue_365() {
function corrects_id (line 86) | fn corrects_id() {
function correct_real_world_id (line 91) | fn correct_real_world_id() {
function corrects_idve (line 100) | fn corrects_idve() {
function correct_real_world_idve (line 105) | fn correct_real_world_idve() {
function corrects_ill (line 114) | fn corrects_ill() {
function correct_real_world_ill (line 119) | fn correct_real_world_ill() {
function corrects_im (line 128) | fn corrects_im() {
function correct_real_world_im (line 133) | fn correct_real_world_im() {
function corrects_ive (line 142) | fn corrects_ive() {
function correct_real_world_ive (line 147) | fn correct_real_world_ive() {
FILE: harper-core/src/linting/cautionary_tale.rs
type CautionaryTale (line 11) | pub struct CautionaryTale {
method default (line 16) | fn default() -> Self {
type Unit (line 26) | type Unit = Chunk;
method expr (line 28) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 32) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 48) | fn description(&self) -> &'static str {
function catches_cautionary_tail (line 59) | fn catches_cautionary_tail() {
function catches_inspirational_tail (line 68) | fn catches_inspirational_tail() {
function catches_capitalized_cautionary_tail (line 77) | fn catches_capitalized_cautionary_tail() {
function catches_uppercase_cautionary_tail (line 86) | fn catches_uppercase_cautionary_tail() {
function catches_mixed_case (line 95) | fn catches_mixed_case() {
function allows_actual_tail (line 104) | fn allows_actual_tail() {
function allows_different_adjective_with_tail (line 113) | fn allows_different_adjective_with_tail() {
function allows_correct_tale (line 118) | fn allows_correct_tale() {
function allows_inspirational_tale (line 127) | fn allows_inspirational_tale() {
function catches_in_longer_text (line 136) | fn catches_in_longer_text() {
function catches_multiple_occurrences (line 145) | fn catches_multiple_occurrences() {
function allows_tail_in_different_context (line 154) | fn allows_tail_in_different_context() {
function catches_at_start_of_sentence (line 163) | fn catches_at_start_of_sentence() {
FILE: harper-core/src/linting/change_tack.rs
type ChangeTack (line 8) | pub struct ChangeTack {
method default (line 13) | fn default() -> Self {
type Unit (line 40) | type Unit = Chunk;
method expr (line 42) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 46) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 63) | fn description(&self) -> &'static str {
function change_tact_atomic (line 76) | fn change_tact_atomic() {
function changed_tacks_atomic (line 81) | fn changed_tacks_atomic() {
function changes_tacts_atomic (line 86) | fn changes_tacts_atomic() {
function changing_tact_atomic (line 91) | fn changing_tact_atomic() {
function change_of_tacks_atomic (line 98) | fn change_of_tacks_atomic() {
function change_of_tact_real_world (line 103) | fn change_of_tact_real_world() {
function change_of_tacts_real_world (line 112) | fn change_of_tacts_real_world() {
function changing_of_tacks_real_world (line 121) | fn changing_of_tacks_real_world() {
function changes_of_tact_real_world (line 130) | fn changes_of_tact_real_world() {
function changed_my_tact (line 141) | fn changed_my_tact() {
function changed_our_tact (line 150) | fn changed_our_tact() {
function change_your_tact (line 159) | fn change_your_tact() {
function change_his_tact (line 168) | fn change_his_tact() {
function changed_her_tact (line 177) | fn changed_her_tact() {
function change_its_tact (line 186) | fn change_its_tact() {
function changing_its_tact_apostrophe (line 195) | fn changing_its_tact_apostrophe() {
function changes_their_tact (line 204) | fn changes_their_tact() {
function different_tact (line 213) | fn different_tact() {
FILE: harper-core/src/linting/chock_full.rs
type ChockFull (line 8) | pub struct ChockFull {
method default (line 13) | fn default() -> Self {
type Unit (line 21) | type Unit = Chunk;
method expr (line 23) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 27) | fn match_to_lint(&self, matched_toks: &[Token], source: &[char]) -> Opti...
method description (line 49) | fn description(&self) -> &'static str {
function allows_correct_form (line 60) | fn allows_correct_form() {
function lower_space_chalk (line 69) | fn lower_space_chalk() {
function lower_space_choke (line 78) | fn lower_space_choke() {
function upper_space_chalk (line 87) | fn upper_space_chalk() {
function upper_space_choke (line 96) | fn upper_space_choke() {
function lower_hyphen_chalk (line 105) | fn lower_hyphen_chalk() {
function lower_hyphen_choke (line 114) | fn lower_hyphen_choke() {
function upper_hyphen_chalk (line 123) | fn upper_hyphen_chalk() {
function upper_hyphen_choke (line 132) | fn upper_hyphen_choke() {
FILE: harper-core/src/linting/closed_compounds.rs
function lint_group (line 5) | pub fn lint_group() -> LintGroup {
function it_self (line 96) | fn it_self() {
function my_self (line 103) | fn my_self() {
function there_fore (line 110) | fn there_fore() {
function mis_understood (line 117) | fn mis_understood() {
function mis_use (line 124) | fn mis_use() {
function mis_used (line 131) | fn mis_used() {
function world_wide (line 138) | fn world_wide() {
function over_all (line 145) | fn over_all() {
function how_ever (line 152) | fn how_ever() {
function wide_spread (line 159) | fn wide_spread() {
function not_with_standing (line 166) | fn not_with_standing() {
function any_how (line 173) | fn any_how() {
function none_the_less (line 180) | fn none_the_less() {
function there_upon (line 187) | fn there_upon() {
function in_so_far (line 194) | fn in_so_far() {
function where_upon (line 201) | fn where_upon() {
function up_ward (line 208) | fn up_ward() {
function hence_forth (line 215) | fn hence_forth() {
function regard_less (line 222) | fn regard_less() {
function over_night (line 229) | fn over_night() {
function by_pass (line 236) | fn by_pass() {
function dead_lift (line 243) | fn dead_lift() {
function chalk_board (line 250) | fn chalk_board() {
function key_stoke (line 257) | fn key_stoke() {
function in_tact (line 264) | fn in_tact() {
function intact_is_allowed (line 271) | fn intact_is_allowed() {
function key_stokes (line 276) | fn key_stokes() {
function with_out (line 283) | fn with_out() {
function the_re (line 290) | fn the_re() {
function short_coming (line 297) | fn short_coming() {
function short_comings (line 304) | fn short_comings() {
FILE: harper-core/src/linting/comma_fixes.rs
constant MSG_SPACE_BEFORE (line 8) | const MSG_SPACE_BEFORE: &str = "Don't use a space before a comma.";
constant MSG_AVOID_ASIAN (line 9) | const MSG_AVOID_ASIAN: &str = "Avoid East Asian commas in English contex...
constant MSG_SPACE_AFTER (line 10) | const MSG_SPACE_AFTER: &str = "Use a space after a comma.";
type CommaFixes (line 22) | pub struct CommaFixes;
method lint (line 25) | fn lint(&mut self, document: &crate::Document) -> Vec<Lint> {
method description (line 113) | fn description(&self) -> &'static str {
function allows_english_comma_atomic (line 124) | fn allows_english_comma_atomic() {
function flags_fullwidth_comma_atomic (line 129) | fn flags_fullwidth_comma_atomic() {
function flags_ideographic_comma_atomic (line 134) | fn flags_ideographic_comma_atomic() {
function corrects_fullwidth_comma_real_world (line 139) | fn corrects_fullwidth_comma_real_world() {
function corrects_ideographic_comma_real_world (line 148) | fn corrects_ideographic_comma_real_world() {
function doesnt_flag_comma_space_between_words (line 153) | fn doesnt_flag_comma_space_between_words() {
function flags_fullwidth_comma_space_between_words (line 158) | fn flags_fullwidth_comma_space_between_words() {
function flags_ideographic_comma_space_between_words (line 163) | fn flags_ideographic_comma_space_between_words() {
function doesnt_flag_semicolon_space_between_words (line 168) | fn doesnt_flag_semicolon_space_between_words() {
function corrects_comma_between_words_with_no_space (line 173) | fn corrects_comma_between_words_with_no_space() {
function corrects_asian_comma_between_words_with_no_space (line 178) | fn corrects_asian_comma_between_words_with_no_space() {
function corrects_space_on_wrong_side_of_comma_between_words (line 183) | fn corrects_space_on_wrong_side_of_comma_between_words() {
function corrects_comma_on_wrong_side_of_asian_comma_between_words (line 188) | fn corrects_comma_on_wrong_side_of_asian_comma_between_words() {
function corrects_comma_between_words_with_space_on_both_sides (line 193) | fn corrects_comma_between_words_with_space_on_both_sides() {
function corrects_asian_comma_between_words_with_space_on_both_sides (line 198) | fn corrects_asian_comma_between_words_with_space_on_both_sides() {
function doesnt_correct_comma_between_non_english_tokens (line 203) | fn doesnt_correct_comma_between_non_english_tokens() {
function issue_2233 (line 208) | fn issue_2233() {
FILE: harper-core/src/linting/compound_nouns/compound_noun_after_det_adj.rs
type CompoundNounAfterDetAdj (line 15) | pub struct CompoundNounAfterDetAdj {
method default (line 26) | fn default() -> Self {
type Unit (line 52) | type Unit = Chunk;
method expr (line 54) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 58) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 87) | fn description(&self) -> &str {
FILE: harper-core/src/linting/compound_nouns/compound_noun_after_possessive.rs
type CompoundNounAfterPossessive (line 19) | pub struct CompoundNounAfterPossessive {
method default (line 25) | fn default() -> Self {
type Unit (line 50) | type Unit = Chunk;
method expr (line 52) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 56) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 86) | fn description(&self) -> &str {
function lets_is_not_possessive (line 97) | fn lets_is_not_possessive() {
function lets_is_not_possessive_typographic_apostrophe (line 106) | fn lets_is_not_possessive_typographic_apostrophe() {
function thats_is_not_possessive (line 115) | fn thats_is_not_possessive() {
FILE: harper-core/src/linting/compound_nouns/compound_noun_before_aux_verb.rs
type CompoundNounBeforeAuxVerb (line 13) | pub struct CompoundNounBeforeAuxVerb {
method default (line 19) | fn default() -> Self {
type Unit (line 41) | type Unit = Chunk;
method expr (line 43) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 47) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 68) | fn description(&self) -> &str {
FILE: harper-core/src/linting/compound_nouns/mod.rs
function is_content_word (line 9) | pub(crate) fn is_content_word(tok: &Token, src: &[char]) -> bool {
function predicate (line 20) | pub(crate) fn predicate(
function web_cam (line 39) | fn web_cam() {
function note_book (line 46) | fn note_book() {
function mother_board (line 53) | fn mother_board() {
function smart_phone (line 60) | fn smart_phone() {
function firm_ware (line 67) | fn firm_ware() {
function back_plane (line 74) | fn back_plane() {
function spread_sheet (line 81) | fn spread_sheet() {
function side_bar (line 88) | fn side_bar() {
function back_pack (line 95) | fn back_pack() {
function cup_board (line 102) | fn cup_board() {
function key_board (line 109) | fn key_board() {
function touch_screen (line 116) | fn touch_screen() {
function head_set (line 123) | fn head_set() {
function frame_work (line 130) | fn frame_work() {
function touch_pad (line 137) | fn touch_pad() {
function micro_processor (line 144) | fn micro_processor() {
function head_phone (line 151) | fn head_phone() {
function micro_services (line 158) | fn micro_services() {
function dash_board (line 165) | fn dash_board() {
function site_map (line 172) | fn site_map() {
function fire_wall (line 179) | fn fire_wall() {
function bit_stream (line 186) | fn bit_stream() {
function block_chain (line 193) | fn block_chain() {
function thumb_nail (line 200) | fn thumb_nail() {
function bath_room (line 207) | fn bath_room() {
function every_one (line 215) | fn every_one() {
function play_ground (line 222) | fn play_ground() {
function run_way (line 229) | fn run_way() {
function cyber_space (line 236) | fn cyber_space() {
function cyber_attack (line 243) | fn cyber_attack() {
function web_socket (line 250) | fn web_socket() {
function finger_print (line 257) | fn finger_print() {
function got_is_not_possessive (line 264) | fn got_is_not_possessive() {
function allow_issue_662 (line 269) | fn allow_issue_662() {
function allow_issue_661 (line 278) | fn allow_issue_661() {
function allow_issue_704 (line 283) | fn allow_issue_704() {
function allows_issue_721 (line 292) | fn allows_issue_721() {
function allows_678 (line 301) | fn allows_678() {
function ina_not_suggested (line 310) | fn ina_not_suggested() {
function allow_suppress_or (line 319) | fn allow_suppress_or() {
function allow_an_arm_and_a_leg (line 328) | fn allow_an_arm_and_a_leg() {
function allow_well_and_723 (line 337) | fn allow_well_and_723() {
function allow_can_not (line 346) | fn allow_can_not() {
function dont_flag_lot_to (line 351) | fn dont_flag_lot_to() {
function dont_flag_to_me (line 360) | fn dont_flag_to_me() {
function allow_issue_1553 (line 369) | fn allow_issue_1553() {
function allow_issue_1496 (line 377) | fn allow_issue_1496() {
function allow_issue_1298 (line 385) | fn allow_issue_1298() {
function dont_flag_project_or (line 393) | fn dont_flag_project_or() {
FILE: harper-core/src/linting/compound_subject_i.rs
constant POSSESSIVE_DETERMINERS (line 8) | const POSSESSIVE_DETERMINERS: &[&str] = &["my", "your", "her", "his", "t...
type CompoundSubjectI (line 10) | pub struct CompoundSubjectI {
method default (line 15) | fn default() -> Self {
type Unit (line 42) | type Unit = Chunk;
method expr (line 44) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 48) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 65) | fn description(&self) -> &'static str {
function corrects_my_mother_and_me (line 76) | fn corrects_my_mother_and_me() {
function corrects_my_brother_and_me (line 85) | fn corrects_my_brother_and_me() {
function corrects_your_friend_and_me (line 94) | fn corrects_your_friend_and_me() {
function corrects_her_manager_and_me (line 103) | fn corrects_her_manager_and_me() {
function corrects_his_cat_and_me (line 112) | fn corrects_his_cat_and_me() {
function corrects_their_kids_and_me (line 121) | fn corrects_their_kids_and_me() {
function corrects_our_neighbor_and_me (line 130) | fn corrects_our_neighbor_and_me() {
function corrects_with_quote_prefix (line 139) | fn corrects_with_quote_prefix() {
function corrects_all_caps (line 148) | fn corrects_all_caps() {
function ignores_between_you_and_me (line 157) | fn ignores_between_you_and_me() {
function ignores_comma_after_me (line 166) | fn ignores_comma_after_me() {
FILE: harper-core/src/linting/confident.rs
type Confident (line 9) | pub struct Confident {
method default (line 14) | fn default() -> Self {
type Unit (line 29) | type Unit = Chunk;
method expr (line 31) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 35) | fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> O...
method description (line 47) | fn description(&self) -> &'static str {
function describing_person_incorrect (line 58) | fn describing_person_incorrect() {
function describing_person_correct (line 67) | fn describing_person_correct() {
function certainty_incorrect (line 76) | fn certainty_incorrect() {
function certainty_correct (line 85) | fn certainty_correct() {
function demeanor_incorrect (line 94) | fn demeanor_incorrect() {
function demeanor_correct (line 103) | fn demeanor_correct() {
function professional_incorrect (line 112) | fn professional_incorrect() {
function professional_correct (line 121) | fn professional_correct() {
function assured_tone_incorrect (line 130) | fn assured_tone_incorrect() {
function assured_tone_correct (line 139) | fn assured_tone_correct() {
function extra_text_between (line 148) | fn extra_text_between() {
function linking_verb_was_confidant (line 157) | fn linking_verb_was_confidant() {
FILE: harper-core/src/linting/correct_number_suffix.rs
type CorrectNumberSuffix (line 7) | pub struct CorrectNumberSuffix;
method lint (line 10) | fn lint(&mut self, document: &Document) -> Vec<Lint> {
method description (line 39) | fn description(&self) -> &'static str {
function passes_correct_cases (line 50) | fn passes_correct_cases() {
function detects_incorrect_cases (line 57) | fn detects_incorrect_cases() {
FILE: harper-core/src/linting/criteria_phenomena.rs
type CriteriaPhenomena (line 11) | pub struct CriteriaPhenomena {
method new (line 18) | fn new() -> Self {
type Unit (line 34) | type Unit = Chunk;
method expr (line 36) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 40) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 64) | fn description(&self) -> &'static str {
method default (line 70) | fn default() -> Self {
function can_detect_incorrect_criteria (line 81) | fn can_detect_incorrect_criteria() {
function can_detect_incorrect_phenomena (line 90) | fn can_detect_incorrect_phenomena() {
function allows_correct_criteria (line 99) | fn allows_correct_criteria() {
function allows_correct_phenomena (line 108) | fn allows_correct_phenomena() {
FILE: harper-core/src/linting/cure_for.rs
type CureFor (line 9) | pub struct CureFor {
method default (line 14) | fn default() -> Self {
type Unit (line 24) | type Unit = Chunk;
method expr (line 26) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 30) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 45) | fn description(&self) -> &str {
function corrects_simple_cure_against (line 56) | fn corrects_simple_cure_against() {
function corrects_plural_cures_against (line 65) | fn corrects_plural_cures_against() {
function corrects_past_participle_cured_against (line 74) | fn corrects_past_participle_cured_against() {
function corrects_uppercase_against (line 83) | fn corrects_uppercase_against() {
function corrects_at_sentence_start (line 92) | fn corrects_at_sentence_start() {
function does_not_flag_cure_for (line 101) | fn does_not_flag_cure_for() {
function does_not_flag_cure_from (line 110) | fn does_not_flag_cure_from() {
function does_not_flag_with_comma (line 119) | fn does_not_flag_with_comma() {
function does_not_flag_unrelated_against (line 128) | fn does_not_flag_unrelated_against() {
function does_not_flag_secure_against (line 137) | fn does_not_flag_secure_against() {
FILE: harper-core/src/linting/currency_placement.rs
type CurrencyPlacement (line 8) | pub struct CurrencyPlacement {}
method lint (line 11) | fn lint(&mut self, document: &Document) -> Vec<Lint> {
method description (line 33) | fn description(&self) -> &str {
function generate_lint_for_tokens (line 39) | fn generate_lint_for_tokens(a: &Token, b: &Token, document: &Document) -...
function eof (line 72) | fn eof() {
function blog_title_allows_correct (line 81) | fn blog_title_allows_correct() {
function blog_title (line 86) | fn blog_title() {
function blog_title_cents (line 95) | fn blog_title_cents() {
function blog_title_with_space (line 104) | fn blog_title_with_space() {
function multiple_dollar_markdown (line 113) | fn multiple_dollar_markdown() {
function multiple_dollar_plain_english (line 122) | fn multiple_dollar_plain_english() {
function multiple_pound (line 131) | fn multiple_pound() {
function suffix (line 140) | fn suffix() {
function seven_even_two_decimal_clean (line 149) | fn seven_even_two_decimal_clean() {
FILE: harper-core/src/linting/damages.rs
type Damages (line 22) | pub struct Damages {
method default (line 27) | fn default() -> Self {
type Unit (line 35) | type Unit = Sentence;
method expr (line 37) | fn expr(&self) -> &dyn Expr {
method match_to_lint_with_context (line 41) | fn match_to_lint_with_context(
method description (line 162) | fn description(&self) -> &str {
function fix_robust_against_damages_by_prev_preposition (line 175) | fn fix_robust_against_damages_by_prev_preposition() {
function fix_vehicle_damages_on_a_car_by_fall_through (line 184) | fn fix_vehicle_damages_on_a_car_by_fall_through() {
function fix_damages_on_mangoes (line 193) | fn fix_damages_on_mangoes() {
function fix_types_of_damages_of_roads (line 202) | fn fix_types_of_damages_of_roads() {
function ignore_damages_in_lost_chance_cases (line 214) | fn ignore_damages_in_lost_chance_cases() {
function ignore_claim_for_damages (line 222) | fn ignore_claim_for_damages() {
function ignore_pay_damages (line 230) | fn ignore_pay_damages() {
function ignore_damages_them (line 244) | fn ignore_damages_them() {
function ignore_damages_firefox (line 252) | fn ignore_damages_firefox() {
function ignore_damages_underlaying_windows (line 260) | fn ignore_damages_underlaying_windows() {
function ignore_estimate_the_damages_and_the_damages_result (line 271) | fn ignore_estimate_the_damages_and_the_damages_result() {
function ignore_damages_inference (line 281) | fn ignore_damages_inference() {
function ignore_received_errors (line 290) | fn ignore_received_errors() {
function ignore_asset_level_damages (line 299) | fn ignore_asset_level_damages() {
FILE: harper-core/src/linting/dashes.rs
constant EN_DASH (line 9) | const EN_DASH: char = '–';
constant EM_DASH (line 10) | const EM_DASH: char = '—';
type Dashes (line 12) | pub struct Dashes {
method default (line 17) | fn default() -> Self {
type Unit (line 31) | type Unit = Chunk;
method expr (line 33) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 37) | fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> O...
method description (line 61) | fn description(&self) -> &'static str {
function catches_en_dash (line 74) | fn catches_en_dash() {
function catches_em_dash (line 83) | fn catches_em_dash() {
function no_overlaps (line 92) | fn no_overlaps() {
function no_lint_for_long_hyphen_sequences (line 97) | fn no_lint_for_long_hyphen_sequences() {
FILE: harper-core/src/linting/day_and_age.rs
type DayAndAge (line 7) | pub struct DayAndAge {
method default (line 12) | fn default() -> Self {
type Unit (line 26) | type Unit = Chunk;
method description (line 28) | fn description(&self) -> &str {
method expr (line 32) | fn expr(&self) -> &dyn Expr {
method match_to_lint_with_context (line 36) | fn match_to_lint_with_context(
function allow_in_this_day_and_age (line 125) | fn allow_in_this_day_and_age() {
function for_this_day_and_age_seems_to_be_acceptable (line 133) | fn for_this_day_and_age_seems_to_be_acceptable() {
function at_this_day_and_age (line 143) | fn at_this_day_and_age() {
function by_this_day_in_age (line 152) | fn by_this_day_in_age() {
function in_these_day_and_age (line 161) | fn in_these_day_and_age() {
function in_these_days_and_age (line 170) | fn in_these_days_and_age() {
function in_these_days_in_age (line 179) | fn in_these_days_in_age() {
function in_this_day_an_age (line 188) | fn in_this_day_an_age() {
function in_this_day_and_ages (line 197) | fn in_this_day_and_ages() {
function in_this_day_in_age (line 206) | fn in_this_day_in_age() {
function in_this_days_and_age (line 215) | fn in_this_days_and_age() {
function is_this_day_and_age_typo (line 224) | fn is_this_day_and_age_typo() {
function it_this_day_and_age_typo (line 233) | fn it_this_day_and_age_typo() {
function of_this_day_and_age (line 242) | fn of_this_day_and_age() {
function to_this_day_and_age (line 251) | fn to_this_day_and_age() {
function no_prep_this_day_in_age (line 260) | fn no_prep_this_day_in_age() {
function no_prep_these_days_and_ages (line 269) | fn no_prep_these_days_and_ages() {
function since_is_a_preposition_but_also_a_conjunction (line 278) | fn since_is_a_preposition_but_also_a_conjunction() {
FILE: harper-core/src/linting/despite_it_is.rs
type DespiteItIs (line 21) | pub struct DespiteItIs {
method default (line 26) | fn default() -> Self {
type Unit (line 41) | type Unit = Chunk;
method description (line 43) | fn description(&self) -> &'static str {
method expr (line 47) | fn expr(&self) -> &dyn Expr {
method match_to_lint_with_context (line 51) | fn match_to_lint_with_context(
function despite_i_am (line 141) | fn despite_i_am() {
function despite_it_is_available (line 154) | fn despite_it_is_available() {
function despite_it_is_detected (line 168) | fn despite_it_is_detected() {
function despite_i_am_in (line 182) | fn despite_i_am_in() {
function despite_it_was_not (line 196) | fn despite_it_was_not() {
function despite_we_are_using (line 210) | fn despite_we_are_using() {
function despite_they_are_already (line 223) | fn despite_they_are_already() {
function despite_it_was_removed (line 236) | fn despite_it_was_removed() {
function ignore_despite_they_shouldnt (line 253) | fn ignore_despite_they_shouldnt() {
function ignore_despite_i_was_playing (line 261) | fn ignore_despite_i_was_playing() {
function ignore_despite_they_were_valid (line 274) | fn ignore_despite_they_were_valid() {
FILE: harper-core/src/linting/despite_of.rs
type DespiteOf (line 8) | pub struct DespiteOf {
method default (line 13) | fn default() -> Self {
type Unit (line 23) | type Unit = Chunk;
method expr (line 25) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 29) | fn match_to_lint(&self, matched: &[Token], source: &[char]) -> Option<Li...
method description (line 45) | fn description(&self) -> &'static str {
function catches_lowercase (line 56) | fn catches_lowercase() {
function catches_different_cases (line 65) | fn catches_different_cases() {
function likes_correction (line 74) | fn likes_correction() {
FILE: harper-core/src/linting/determiner_without_noun.rs
type DeterminerWithoutNoun (line 8) | pub struct DeterminerWithoutNoun {
method default (line 13) | fn default() -> Self {
type Unit (line 24) | type Unit = Chunk;
method expr (line 26) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 30) | fn match_to_lint(&self, matched_tokens: &[Token], _source: &[char]) -> O...
method description (line 42) | fn description(&self) -> &'static str {
function flags_determiner_followed_by_conjunction (line 53) | fn flags_determiner_followed_by_conjunction() {
function flags_indefinite_article_followed_by_conjunction (line 62) | fn flags_indefinite_article_followed_by_conjunction() {
function allows_correct_use_with_noun (line 68) | fn allows_correct_use_with_noun() {
function allows_determiner_noun_then_conjunction (line 73) | fn allows_determiner_noun_then_conjunction() {
FILE: harper-core/src/linting/did_past.rs
type DidPast (line 11) | pub struct DidPast<D> {
function new (line 20) | pub fn new(dict: D) -> Self {
function keep_suggestion_if_lemma (line 37) | fn keep_suggestion_if_lemma(&self, suggs: &mut Vec<Vec<char>>, candidate...
type Unit (line 52) | type Unit = Chunk;
method description (line 54) | fn description(&self) -> &str {
method expr (line 58) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 62) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
function ed_did_forked (line 131) | fn ed_did_forked() {
function d_did_used (line 142) | fn d_did_used() {
function y_did_fried (line 153) | fn y_did_fried() {
function doubed_consonant_logged (line 164) | fn doubed_consonant_logged() {
function did_past (line 175) | fn did_past() {
function did_past_with_apostrophe (line 180) | fn did_past_with_apostrophe() {
function didnt_past_no_apostrophe (line 189) | fn didnt_past_no_apostrophe() {
function did_i_heard (line 198) | fn did_i_heard() {
function did_i_heard_with_apostrophe (line 207) | fn did_i_heard_with_apostrophe() {
function didnt_i_forgot_no_apostrophe (line 216) | fn didnt_i_forgot_no_apostrophe() {
function ignore_lemma_same_as_past_tense (line 227) | fn ignore_lemma_same_as_past_tense() {
function fix_did_you_cmae (line 234) | fn fix_did_you_cmae() {
function fix_did_you_wrote (line 243) | fn fix_did_you_wrote() {
function fix_didnt_had (line 252) | fn fix_didnt_had() {
function did_you_went (line 261) | fn did_you_went() {
function fix_did_needed (line 270) | fn fix_did_needed() {
function fix_did_thought (line 279) | fn fix_did_thought() {
function fix_did_wanted (line 288) | fn fix_did_wanted() {
function fix_did_not_changed (line 297) | fn fix_did_not_changed() {
function ignore_did_you_read (line 306) | fn ignore_did_you_read() {
FILE: harper-core/src/linting/didnt.rs
type Didnt (line 6) | pub struct Didnt {
method default (line 11) | fn default() -> Self {
type Unit (line 22) | type Unit = Chunk;
method expr (line 24) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 28) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 43) | fn description(&self) -> &str {
function corrects_i_dint (line 54) | fn corrects_i_dint() {
function corrects_you_dint (line 63) | fn corrects_you_dint() {
function corrects_he_dint (line 72) | fn corrects_he_dint() {
function corrects_she_dint (line 81) | fn corrects_she_dint() {
function corrects_we_dint (line 90) | fn corrects_we_dint() {
function corrects_they_dint (line 99) | fn corrects_they_dint() {
function corrects_it_dint (line 108) | fn corrects_it_dint() {
function does_not_flag_dint_noun (line 117) | fn does_not_flag_dint_noun() {
function does_not_flag_quoted_dint (line 122) | fn does_not_flag_quoted_dint() {
function does_not_flag_past_tense_with_not (line 127) | fn does_not_flag_past_tense_with_not() {
FILE: harper-core/src/linting/discourse_markers.rs
type DiscourseMarkers (line 9) | pub struct DiscourseMarkers {
method new (line 14) | pub fn new() -> Self {
method lint_sentence (line 60) | fn lint_sentence(&self, sent: &[Token], source: &[char]) -> Option<Lin...
method default (line 78) | fn default() -> Self {
method lint (line 84) | fn lint(&mut self, document: &Document) -> Vec<Lint> {
method description (line 91) | fn description(&self) -> &str {
function corrects_frankly (line 103) | fn corrects_frankly() {
function corrects_however (line 112) | fn corrects_however() {
function corrects_therefore (line 121) | fn corrects_therefore() {
function corrects_meanwhile (line 130) | fn corrects_meanwhile() {
function corrects_furthermore (line 139) | fn corrects_furthermore() {
function corrects_nevertheless (line 148) | fn corrects_nevertheless() {
function corrects_consequently (line 157) | fn corrects_consequently() {
function corrects_thus (line 166) | fn corrects_thus() {
function allows_thus_far (line 175) | fn allows_thus_far() {
function corrects_instead (line 183) | fn corrects_instead() {
function corrects_moreover (line 192) | fn corrects_moreover() {
function corrects_alternatively (line 201) | fn corrects_alternatively() {
function no_suggestion_if_comma_present (line 210) | fn no_suggestion_if_comma_present() {
function no_lint_for_mid_sentence_marker (line 218) | fn no_lint_for_mid_sentence_marker() {
function preserves_whitespace (line 226) | fn preserves_whitespace() {
function corrects_semicolon_case (line 235) | fn corrects_semicolon_case() {
function corrects_multiple_sentences (line 244) | fn corrects_multiple_sentences() {
function allows_single_word_sentence (line 253) | fn allows_single_word_sentence() {
function corrects_for_example (line 258) | fn corrects_for_example() {
function no_suggestion_if_comma_after_for_example (line 267) | fn no_suggestion_if_comma_after_for_example() {
function preserves_whitespace_for_example (line 275) | fn preserves_whitespace_for_example() {
function corrects_on_the_other_hand (line 284) | fn corrects_on_the_other_hand() {
function no_lint_for_mid_sentence_on_the_other_hand (line 293) | fn no_lint_for_mid_sentence_on_the_other_hand() {
function check_2966_is_avoided (line 301) | fn check_2966_is_avoided() {
FILE: harper-core/src/linting/disjoint_prefixes.rs
type DisjointPrefixes (line 8) | pub struct DisjointPrefixes<D> {
constant OUT_EXCEPTIONS (line 14) | const OUT_EXCEPTIONS: &[&str] = &["boxes", "facing", "live", "numbers", ...
constant OVER_EXCEPTIONS (line 15) | const OVER_EXCEPTIONS: &[&str] = &["all", "joy", "long", "night", "readi...
constant UNDER_EXCEPTIONS (line 16) | const UNDER_EXCEPTIONS: &[&str] = &["development", "mine"];
constant UP_EXCEPTIONS (line 17) | const UP_EXCEPTIONS: &[&str] = &["loading", "right", "state", "time", "t...
function new (line 23) | pub fn new(dict: D) -> Self {
type Unit (line 64) | type Unit = Chunk;
method expr (line 66) | fn expr(&self) -> &dyn Expr {
method match_to_lint_with_context (line 70) | fn match_to_lint_with_context(
method description (line 149) | fn description(&self) -> &str {
function fix_hyphenated_to_joined (line 163) | fn fix_hyphenated_to_joined() {
function fix_open_to_joined (line 172) | fn fix_open_to_joined() {
function dont_join_open_co_op (line 181) | fn dont_join_open_co_op() {
function dont_join_hyphenated_co_op (line 189) | fn dont_join_hyphenated_co_op() {
function fix_open_to_hyphenated (line 197) | fn fix_open_to_hyphenated() {
FILE: harper-core/src/linting/do_mistake.rs
type DoMistake (line 11) | pub struct DoMistake {
method default (line 16) | fn default() -> Self {
type Unit (line 45) | type Unit = Chunk;
method match_to_lint_with_context (line 47) | fn match_to_lint_with_context(
method description (line 86) | fn description(&self) -> &str {
method expr (line 90) | fn expr(&self) -> &dyn Expr {
function did_a_mistake (line 101) | fn did_a_mistake() {
function did_my_mistakes (line 110) | fn did_my_mistakes() {
function did_several_mistakes (line 119) | fn did_several_mistakes() {
function did_some_mistakes (line 128) | fn did_some_mistakes() {
function did_that_mistake (line 137) | fn did_that_mistake() {
function did_the_mistake (line 146) | fn did_the_mistake() {
function did_this_mistake (line 155) | fn did_this_mistake() {
function do_many_mistakes (line 164) | fn do_many_mistakes() {
function do_mistake (line 173) | fn do_mistake() {
function do_some_mistakes (line 182) | fn do_some_mistakes() {
function do_the_mistake (line 191) | fn do_the_mistake() {
function do_this_mistake (line 200) | fn do_this_mistake() {
function do_this_mistakes (line 209) | fn do_this_mistakes() {
function do_those_mistakes (line 218) | fn do_those_mistakes() {
function doing_a_mistake (line 227) | fn doing_a_mistake() {
function doing_several_mistakes (line 236) | fn doing_several_mistakes() {
function doing_the_mistkae (line 245) | fn doing_the_mistkae() {
function done_some_mistake (line 254) | fn done_some_mistake() {
function done_this_mistake (line 263) | fn done_this_mistake() {
function dont_flag_when_does_a_mistake (line 274) | fn dont_flag_when_does_a_mistake() {
function dont_flag_did_that_mistake_verb (line 282) | fn dont_flag_did_that_mistake_verb() {
function dont_flag_does_this_mistake_verb (line 290) | fn dont_flag_does_this_mistake_verb() {
function dont_flag_does_the_mistake_verb (line 298) | fn dont_flag_does_the_mistake_verb() {
FILE: harper-core/src/linting/dot_initialisms.rs
type DotInitialisms (line 11) | pub struct DotInitialisms {
method default (line 17) | fn default() -> Self {
type Unit (line 40) | type Unit = Chunk;
method expr (line 42) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 46) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 61) | fn description(&self) -> &'static str {
function matches_eg (line 72) | fn matches_eg() {
FILE: harper-core/src/linting/double_click.rs
type DoubleClick (line 8) | pub struct DoubleClick {
method double_click_sequence (line 13) | fn double_click_sequence() -> SequenceExpr {
method default (line 22) | fn default() -> Self {
type Unit (line 53) | type Unit = Chunk;
method expr (line 55) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 59) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 84) | fn description(&self) -> &'static str {
function corrects_basic_command (line 95) | fn corrects_basic_command() {
function corrects_with_preposition (line 104) | fn corrects_with_preposition() {
function corrects_with_pronoun (line 113) | fn corrects_with_pronoun() {
function corrects_plural_form (line 122) | fn corrects_plural_form() {
function corrects_past_tense (line 131) | fn corrects_past_tense() {
function corrects_gerund (line 140) | fn corrects_gerund() {
function corrects_with_caps (line 149) | fn corrects_with_caps() {
function corrects_multiline (line 158) | fn corrects_multiline() {
function corrects_at_sentence_end (line 167) | fn corrects_at_sentence_end() {
function allows_hyphenated_form (line 176) | fn allows_hyphenated_form() {
function ignores_other_double_words (line 181) | fn ignores_other_double_words() {
FILE: harper-core/src/linting/double_modal.rs
type DoubleModal (line 10) | pub struct DoubleModal {
method default (line 15) | fn default() -> Self {
type Unit (line 25) | type Unit = Chunk;
method expr (line 27) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 31) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 47) | fn description(&self) -> &'static str {
function detects_might_could (line 58) | fn detects_might_could() {
function detects_should_ought (line 67) | fn detects_should_ought() {
function allows_single_modal (line 72) | fn allows_single_modal() {
function detects_two_double_modals (line 77) | fn detects_two_double_modals() {
function suggests_removing_second_modal_keeps_first (line 86) | fn suggests_removing_second_modal_keeps_first() {
function suggests_removing_second_modal_keeps_first_variant_order (line 95) | fn suggests_removing_second_modal_keeps_first_variant_order() {
function suggests_removing_second_modal_keeps_first_capitalised (line 104) | fn suggests_removing_second_modal_keeps_first_capitalised() {
function allows_will_need (line 113) | fn allows_will_need() {
FILE: harper-core/src/linting/ellipsis_length.rs
type EllipsisLength (line 9) | pub struct EllipsisLength;
method lint (line 12) | fn lint(&mut self, document: &crate::Document) -> Vec<Lint> {
method description (line 39) | fn description(&self) -> &'static str {
function allows_correct_ellipsis (line 50) | fn allows_correct_ellipsis() {
function corrects_long_ellipsis (line 55) | fn corrects_long_ellipsis() {
function corrects_short_ellipsis (line 61) | fn corrects_short_ellipsis() {
FILE: harper-core/src/linting/else_possessive.rs
type ElsePossessive (line 11) | pub struct ElsePossessive {
method default (line 16) | fn default() -> Self {
type Unit (line 37) | type Unit = Chunk;
method expr (line 39) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 43) | fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {
method description (line 54) | fn description(&self) -> &str {
function fixes_no_one_elses (line 65) | fn fixes_no_one_elses() {
function fixes_someone_elses (line 74) | fn fixes_someone_elses() {
function fixes_anybody_elses (line 83) | fn fixes_anybody_elses() {
function fixes_everyone_elses (line 92) | fn fixes_everyone_elses() {
function ignores_correct_form (line 101) | fn ignores_correct_form() {
FILE: harper-core/src/linting/ever_every.rs
type EverEvery (line 8) | pub struct EverEvery {
method default (line 13) | fn default() -> Self {
type Unit (line 34) | type Unit = Chunk;
method expr (line 36) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 40) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 55) | fn description(&self) -> &str {
function fix_can_i_every (line 66) | fn fix_can_i_every() {
function fix_can_they_every (line 75) | fn fix_can_they_every() {
function fix_can_we_every (line 84) | fn fix_can_we_every() {
function fix_did_we_every (line 93) | fn fix_did_we_every() {
function fix_did_you_every (line 102) | fn fix_did_you_every() {
function fix_do_i_every (line 111) | fn fix_do_i_every() {
function fix_do_we_every (line 120) | fn fix_do_we_every() {
function fix_do_you_every (line 129) | fn fix_do_you_every() {
function fix_dont_i_every (line 138) | fn fix_dont_i_every() {
function fix_dont_they_every (line 147) | fn fix_dont_they_every() {
function fix_dont_you_every (line 156) | fn fix_dont_you_every() {
function fix_have_you_every (line 165) | fn fix_have_you_every() {
function fix_should_i_every (line 174) | fn fix_should_i_every() {
function fix_should_we_every (line 183) | fn fix_should_we_every() {
function fix_should_you_every (line 192) | fn fix_should_you_every() {
function fix_would_i_every (line 201) | fn fix_would_i_every() {
function fix_would_they_every (line 210) | fn fix_would_they_every() {
function dont_flag_should_we_every (line 222) | fn dont_flag_should_we_every() {
FILE: harper-core/src/linting/everyday.rs
type Everyday (line 9) | pub struct Everyday {
method default (line 14) | fn default() -> Self {
type Unit (line 124) | type Unit = Chunk;
method expr (line 126) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 130) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 185) | fn description(&self) -> &str {
function dont_flag_lone_adjective (line 196) | fn dont_flag_lone_adjective() {
function dont_flag_lone_adverb (line 201) | fn dont_flag_lone_adverb() {
function correct_adjective_at_end_of_chunk (line 206) | fn correct_adjective_at_end_of_chunk() {
function correct_adverb_after_article_before_noun (line 215) | fn correct_adverb_after_article_before_noun() {
function correct_adjective_without_following_noun (line 225) | fn correct_adjective_without_following_noun() {
function dont_flag_everyday_adjective_before_dev (line 234) | fn dont_flag_everyday_adjective_before_dev() {
function dont_flag_everyday_adjective_before_present_participle (line 243) | fn dont_flag_everyday_adjective_before_present_participle() {
function dont_flag_everyday_adjective_before_plural_noun (line 248) | fn dont_flag_everyday_adjective_before_plural_noun() {
function correct_everyday_at_end_of_sentence_after_past_verb (line 257) | fn correct_everyday_at_end_of_sentence_after_past_verb() {
function dont_flag_every_day_at_start_of_sentence_before_comma (line 266) | fn dont_flag_every_day_at_start_of_sentence_before_comma() {
function dont_flag_every_day_at_start_of_sentence_before_copula (line 275) | fn dont_flag_every_day_at_start_of_sentence_before_copula() {
function dont_flag_every_day_at_end_of_sentence_after_noun (line 280) | fn dont_flag_every_day_at_end_of_sentence_after_noun() {
function dont_flag_every_day_after_noun_before_conjunction (line 285) | fn dont_flag_every_day_after_noun_before_conjunction() {
function correct_every_day_after_article (line 295) | fn correct_every_day_after_article() {
function dont_flag_everyday_before_unknown_word (line 304) | fn dont_flag_everyday_before_unknown_word() {
function dont_flag_every_day_at_end_of_chunk_after_adverb (line 313) | fn dont_flag_every_day_at_end_of_chunk_after_adverb() {
function dont_flag_every_day_after_verb_before_if (line 322) | fn dont_flag_every_day_after_verb_before_if() {
function dont_flag_every_day_after_noun_before_preposition (line 331) | fn dont_flag_every_day_after_noun_before_preposition() {
function dont_flag_every_day_after_time (line 340) | fn dont_flag_every_day_after_time() {
function dont_flag_every_day_at_start_of_chunk_before_np (line 349) | fn dont_flag_every_day_at_start_of_chunk_before_np() {
function fix_everyday_and_every_day_used_wrongly (line 358) | fn fix_everyday_and_every_day_used_wrongly() {
function fix_reddit_why_does_everyday (line 367) | fn fix_reddit_why_does_everyday() {
function fix_reddit_everyday_is_going_to (line 376) | fn fix_reddit_everyday_is_going_to() {
function fix_reddit_draw_everyday (line 385) | fn fix_reddit_draw_everyday() {
function fix_reddit_two_bad_out_of_three (line 394) | fn fix_reddit_two_bad_out_of_three() {
function fix_reddit_every_day_routine (line 403) | fn fix_reddit_every_day_routine() {
function fix_stackoverflow_every_day_things (line 412) | fn fix_stackoverflow_every_day_things() {
function fix_reddit_everyday_is_same (line 421) | fn fix_reddit_everyday_is_same() {
function fix_medium_little_bit_everyday (line 431) | fn fix_medium_little_bit_everyday() {
function fix_stackexchange_use_everyday (line 440) | fn fix_stackexchange_use_everyday() {
function fix_github_what_i_learned_everyday (line 449) | fn fix_github_what_i_learned_everyday() {
function fix_medium_one_bad_out_of_three (line 458) | fn fix_medium_one_bad_out_of_three() {
function fix_medium_doing_something_everyday (line 467) | fn fix_medium_doing_something_everyday() {
function fix_medium_all_caps (line 476) | fn fix_medium_all_caps() {
function dont_flag_every_day_singular_noun_2020 (line 485) | fn dont_flag_every_day_singular_noun_2020() {
FILE: harper-core/src/linting/expand_memory_shorthands.rs
type ExpandMemoryShorthands (line 10) | pub struct ExpandMemoryShorthands {
method new (line 15) | pub fn new() -> Self {
method get_replacement (line 29) | fn get_replacement(abbreviation: &str, plural: Option<bool>) -> Option...
method default (line 64) | fn default() -> Self {
type Unit (line 70) | type Unit = Chunk;
method expr (line 72) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 76) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 107) | fn description(&self) -> &str {
function detects_bytes (line 119) | fn detects_bytes() {
function detects_kilobytes (line 124) | fn detects_kilobytes() {
function detects_megabytes (line 129) | fn detects_megabytes() {
function detects_gigabytes (line 134) | fn detects_gigabytes() {
function detects_terabytes (line 139) | fn detects_terabytes() {
function detects_kibibytes (line 144) | fn detects_kibibytes() {
function detects_mebibytes (line 149) | fn detects_mebibytes() {
function detects_gibibytes (line 154) | fn detects_gibibytes() {
function detects_tebibytes (line 159) | fn detects_tebibytes() {
function detects_petabytes (line 164) | fn detects_petabytes() {
function detects_exabytes (line 169) | fn detects_exabytes() {
function detects_zettabytes (line 174) | fn detects_zettabytes() {
function detects_yottabytes (line 179) | fn detects_yottabytes() {
function detects_quettabytes (line 184) | fn detects_quettabytes() {
function detects_pebibytes (line 189) | fn detects_pebibytes() {
function detects_exbibytes (line 194) | fn detects_exbibytes() {
function detects_zebibytes (line 199) | fn detects_zebibytes() {
function detects_yobibytes (line 204) | fn detects_yobibytes() {
function detects_robibytes (line 209) | fn detects_robibytes() {
function detects_quebibytes (line 214) | fn detects_quebibytes() {
function handles_punctuation (line 219) | fn handles_punctuation() {
function handles_adjacent_number (line 224) | fn handles_adjacent_number() {
function handles_hyphen_separated (line 229) | fn handles_hyphen_separated() {
function doesnt_handle_wrong_kb_cases (line 234) | fn doesnt_handle_wrong_kb_cases() {
FILE: harper-core/src/linting/expand_time_shorthands.rs
type ExpandTimeShorthands (line 11) | pub struct ExpandTimeShorthands {
method new (line 16) | pub fn new() -> Self {
method get_replacement (line 29) | fn get_replacement(abbreviation: &str, plural: Option<bool>) -> Option...
method default (line 46) | fn default() -> Self {
type Unit (line 52) | type Unit = Chunk;
method expr (line 54) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 58) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 89) | fn description(&self) -> &str {
function detects_singular_hour (line 101) | fn detects_singular_hour() {
function detects_singular_minute (line 106) | fn detects_singular_minute() {
function detects_singular_second (line 111) | fn detects_singular_second() {
function detects_plural_hours (line 116) | fn detects_plural_hours() {
function detects_plural_minutes (line 121) | fn detects_plural_minutes() {
function detects_plural_seconds (line 126) | fn detects_plural_seconds() {
function detects_millisecond (line 131) | fn detects_millisecond() {
function detects_milliseconds (line 136) | fn detects_milliseconds() {
function handles_punctuation_hour (line 141) | fn handles_punctuation_hour() {
function handles_punctuation_minute (line 146) | fn handles_punctuation_minute() {
function handles_punctuation_second (line 151) | fn handles_punctuation_second() {
function handles_adjacent_number_hour (line 156) | fn handles_adjacent_number_hour() {
function handles_adjacent_number_minute (line 161) | fn handles_adjacent_number_minute() {
function handles_adjacent_number_second (line 166) | fn handles_adjacent_number_second() {
FILE: harper-core/src/linting/expr_linter.rs
type DocumentIterator (line 8) | pub trait DocumentIterator {
method iter_units (line 11) | fn iter_units<'a>(document: &'a Document) -> Box<dyn Iterator<Item = &...
type Unit (line 20) | type Unit = Chunk;
method iter_units (line 22) | fn iter_units<'a>(document: &'a Document) -> Box<dyn Iterator<Item = &...
type Unit (line 28) | type Unit = Sentence;
method iter_units (line 30) | fn iter_units<'a>(document: &'a Document) -> Box<dyn Iterator<Item = &...
type Chunk (line 15) | pub struct Chunk;
type Sentence (line 17) | pub struct Sentence;
type ExprLinter (line 40) | pub trait ExprLinter: LSend {
method expr (line 44) | fn expr(&self) -> &dyn Expr;
method match_to_lint (line 54) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> ...
method match_to_lint_with_context (line 64) | fn match_to_lint_with_context(
method description (line 75) | fn description(&self) -> &str;
type Unit (line 196) | type Unit = Chunk;
method expr (line 198) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 202) | fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {
method description (line 211) | fn description(&self) -> &str {
type Unit (line 229) | type Unit = Chunk;
method expr (line 231) | fn expr(&self) -> &dyn Expr {
method match_to_lint_with_context (line 235) | fn match_to_lint_with_context(
method description (line 277) | fn description(&self) -> &str {
type Unit (line 295) | type Unit = Sentence;
method expr (line 297) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 301) | fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {
method description (line 310) | fn description(&self) -> &str {
function find_the_only_token_matching (line 82) | pub fn find_the_only_token_matching<'a, F>(
method lint (line 102) | fn lint(&mut self, document: &Document) -> Vec<Lint> {
method description (line 113) | fn description(&self) -> &str {
function run_on_chunk (line 118) | pub fn run_on_chunk<'a>(
function followed_by_word (line 142) | pub fn followed_by_word(
function followed_by_hyphen (line 155) | pub fn followed_by_hyphen(context: Option<(&[Token], &[Token])>) -> bool {
function preceded_by_word (line 161) | pub fn preceded_by_word(
type TestSimpleLinter (line 183) | pub struct TestSimpleLinter {
method default (line 188) | fn default() -> Self {
type TestContextLinter (line 216) | pub struct TestContextLinter {
method default (line 221) | fn default() -> Self {
type TestSentenceLinter (line 282) | pub struct TestSentenceLinter {
method default (line 287) | fn default() -> Self {
function simple_test_123 (line 316) | fn simple_test_123() {
function context_test_123 (line 321) | fn context_test_123() {
function context_test_321 (line 326) | fn context_test_321() {
function sentence_test_123 (line 331) | fn sentence_test_123() {
FILE: harper-core/src/linting/far_be_it.rs
type FarBeIt (line 7) | pub struct FarBeIt {
method default (line 12) | fn default() -> Self {
type Unit (line 27) | type Unit = Chunk;
method expr (line 29) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 33) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 59) | fn description(&self) -> &'static str {
function far_be_it_for_me_capitalized (line 72) | fn far_be_it_for_me_capitalized() {
function far_be_it_for_me_lowercase (line 81) | fn far_be_it_for_me_lowercase() {
function far_be_it_that (line 90) | fn far_be_it_that() {
function far_be_it_for_the_software (line 99) | fn far_be_it_for_the_software() {
function missing_punctuation_false_positive (line 109) | fn missing_punctuation_false_positive() {
function far_be_it_to (line 117) | fn far_be_it_to() {
FILE: harper-core/src/linting/fascinated_by.rs
type FascinatedBy (line 7) | pub struct FascinatedBy {
method default (line 12) | fn default() -> Self {
type Unit (line 20) | type Unit = Chunk;
method expr (line 22) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 26) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 46) | fn description(&self) -> &str {
function fix_amiga (line 56) | fn fix_amiga() {
function fix_microbit (line 69) | fn fix_microbit() {
function fix_software_development (line 82) | fn fix_software_development() {
function fix_computer_science (line 95) | fn fix_computer_science() {
function fix_possibilities (line 108) | fn fix_possibilities() {
function fix_project (line 121) | fn fix_project() {
function fix_work (line 134) | fn fix_work() {
function fix_ais (line 147) | fn fix_ais() {
function fix_innovative_ideas (line 160) | fn fix_innovative_ideas() {
function fix_coding (line 173) | fn fix_coding() {
FILE: harper-core/src/linting/fed_up_with.rs
type FedUpWith (line 7) | pub struct FedUpWith {
method new (line 13) | pub fn new(dialect: Dialect) -> Self {
type Unit (line 21) | type Unit = Chunk;
method expr (line 23) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 27) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 47) | fn description(&self) -> &str {
function correct_fed_up_of_in_us_english (line 59) | fn correct_fed_up_of_in_us_english() {
function correct_fed_up_of_in_canadian_english (line 68) | fn correct_fed_up_of_in_canadian_english() {
function correct_fed_up_of_in_aus_english (line 77) | fn correct_fed_up_of_in_aus_english() {
function correct_fed_up_of_in_indian_english (line 86) | fn correct_fed_up_of_in_indian_english() {
function dont_flag_fed_up_of_in_british_english (line 95) | fn dont_flag_fed_up_of_in_british_english() {
FILE: harper-core/src/linting/feel_fell.rs
type FeelFell (line 8) | pub struct FeelFell {
method default (line 13) | fn default() -> Self {
type Unit (line 42) | type Unit = Chunk;
method expr (line 44) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 48) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 67) | fn description(&self) -> &'static str {
function fix_i_fell_like (line 79) | fn fix_i_fell_like() {
function fix_if_you_fell_like_it (line 88) | fn fix_if_you_fell_like_it() {
function fix_i_dont_fell_like (line 97) | fn fix_i_dont_fell_like() {
function fix_fell_comfortable (line 106) | fn fix_fell_comfortable() {
function fix_fell_good (line 115) | fn fix_fell_good() {
function fix_didnt_fell (line 124) | fn fix_didnt_fell() {
function fix_fell_free (line 133) | fn fix_fell_free() {
function fix_fell_right (line 143) | fn fix_fell_right() {
function dont_flag_fell_right_into (line 152) | fn dont_flag_fell_right_into() {
function dont_flag_fell_right_through (line 160) | fn dont_flag_fell_right_through() {
function fix_does_not_fell_comfortable (line 168) | fn fix_does_not_fell_comfortable() {
function dont_flag_didnt_fell_for_it (line 178) | fn dont_flag_didnt_fell_for_it() {
function fix_fell_that (line 186) | fn fix_fell_that() {
function fix_fell_it (line 195) | fn fix_fell_it() {
function fix_fell_its (line 204) | fn fix_fell_its() {
function fix_fell_im (line 213) | fn fix_fell_im() {
function fix_fell_we (line 222) | fn fix_fell_we() {
function fix_fell_i (line 231) | fn fix_fell_i() {
function fix_fell_you (line 240) | fn fix_fell_you() {
FILE: harper-core/src/linting/few_units_of_time_ago.rs
type FewUnitsOfTimeAgo (line 10) | pub struct FewUnitsOfTimeAgo {
method default (line 15) | fn default() -> Self {
type Unit (line 32) | type Unit = Chunk;
method expr (line 34) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 38) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 62) | fn description(&self) -> &'static str {
function fix_few_minutes_ago (line 76) | fn fix_few_minutes_ago() {
function dont_flag_a_few_minutes_ago (line 85) | fn dont_flag_a_few_minutes_ago() {
function fix_done_few_minutes_ago (line 90) | fn fix_done_few_minutes_ago() {
function dont_flag_done_a_few_minutes_ago (line 99) | fn dont_flag_done_a_few_minutes_ago() {
function fix_after_space (line 105) | fn fix_after_space() {
function fix_2nd_sentence (line 115) | fn fix_2nd_sentence() {
function fix_days (line 126) | fn fix_days() {
function fix_decades (line 135) | fn fix_decades() {
function fix_hours (line 144) | fn fix_hours() {
function fix_minutes (line 153) | fn fix_minutes() {
function fix_months (line 162) | fn fix_months() {
function fix_ms (line 171) | fn fix_ms() {
function fix_seconds (line 180) | fn fix_seconds() {
function fix_weekends (line 189) | fn fix_weekends() {
function fix_weeks (line 198) | fn fix_weeks() {
function fix_years (line 207) | fn fix_years() {
function dont_flag_centuries (line 218) | fn dont_flag_centuries() {
function dont_flag_days (line 227) | fn dont_flag_days() {
function dont_flag_decades (line 236) | fn dont_flag_decades() {
function dont_flag_hours (line 245) | fn dont_flag_hours() {
function dont_flag_milliseconds (line 254) | fn dont_flag_milliseconds() {
function dont_flag_minutes (line 263) | fn dont_flag_minutes() {
function dont_flag_moments (line 272) | fn dont_flag_moments() {
function dont_flag_months (line 281) | fn dont_flag_months() {
function dont_flag_nights (line 290) | fn dont_flag_nights() {
function dont_flag_seconds (line 299) | fn dont_flag_seconds() {
function dont_flag_weeks (line 308) | fn dont_flag_weeks() {
function dont_flag_years (line 317) | fn dont_flag_years() {
function dont_flag_decade (line 328) | fn dont_flag_decade() {
function dont_flag_hour (line 337) | fn dont_flag_hour() {
function dont_flag_millennia (line 346) | fn dont_flag_millennia() {
function dont_flag_minute (line 355) | fn dont_flag_minute() {
function dont_flag_moment (line 364) | fn dont_flag_moment() {
function dont_flag_month (line 373) | fn dont_flag_month() {
function dont_flag_second (line 382) | fn dont_flag_second() {
function dont_flag_week (line 391) | fn dont_flag_week() {
function dont_flag_year (line 400) | fn dont_flag_year() {
function dont_flag_days_apos (line 411) | fn dont_flag_days_apos() {
function dont_flag_months_apos (line 420) | fn dont_flag_months_apos() {
function dont_flag_weeks_apos (line 429) | fn dont_flag_weeks_apos() {
function dont_flag_years_apos (line 438) | fn dont_flag_years_apos() {
function fix_day (line 449) | fn fix_day() {
function fix_decade (line 459) | fn fix_decade() {
function fix_minute (line 468) | fn fix_minute() {
function fix_weekend (line 477) | fn fix_weekend() {
FILE: harper-core/src/linting/filler_words.rs
type FillerWords (line 9) | pub struct FillerWords {
method default (line 15) | fn default() -> Self {
type Unit (line 28) | type Unit = Chunk;
method expr (line 30) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 34) | fn match_to_lint(&self, toks: &[Token], _src: &[char]) -> Option<Lint> {
method description (line 45) | fn description(&self) -> &str {
function remove_uh (line 56) | fn remove_uh() {
function remove_um_st_start (line 65) | fn remove_um_st_start() {
FILE: harper-core/src/linting/find_fine.rs
type FindFine (line 9) | pub struct FindFine {
method default (line 14) | fn default() -> Self {
type Unit (line 24) | type Unit = Chunk;
method expr (line 26) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 30) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 45) | fn description(&self) -> &'static str {
function issue_2115 (line 57) | fn issue_2115() {
FILE: harper-core/src/linting/first_aid_kit.rs
type FirstAidKit (line 10) | pub struct FirstAidKit {
method default (line 15) | fn default() -> Self {
type Unit (line 25) | type Unit = Chunk;
method expr (line 27) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 31) | fn match_to_lint(&self, tokens: &[Token], source: &[char]) -> Option<Lin...
method description (line 47) | fn description(&self) -> &str {
function corrects_first_aid_kid (line 58) | fn corrects_first_aid_kid() {
function corrects_starter_kid (line 67) | fn corrects_starter_kid() {
function corrects_travel_kid (line 76) | fn corrects_travel_kid() {
function corrects_tool_kid (line 85) | fn corrects_tool_kid() {
function does_not_flag_kid_in_other_contexts (line 94) | fn does_not_flag_kid_in_other_contexts() {
FILE: harper-core/src/linting/flesh_out_vs_full_fledged.rs
type FleshOutVsFullFledged (line 7) | pub struct FleshOutVsFullFledged {
method default (line 12) | fn default() -> Self {
type Unit (line 26) | type Unit = Chunk;
method expr (line 28) | fn expr(&self) -> &dyn Expr {
method match_to_lint_with_context (line 32) | fn match_to_lint_with_context(
method description (line 179) | fn description(&self) -> &str {
function full_fledge_hyphen (line 196) | fn full_fledge_hyphen() {
function full_fleshed_space (line 207) | fn full_fleshed_space() {
function full_fleshed_webscraper_hyphen (line 216) | fn full_fleshed_webscraper_hyphen() {
function full_fleshed_implementation_hyphen (line 225) | fn full_fleshed_implementation_hyphen() {
function full_pledged_space (line 234) | fn full_pledged_space() {
function full_pledged_hyphen (line 243) | fn full_pledged_hyphen() {
function not_fully_fledged_out (line 256) | fn not_fully_fledged_out() {
function fully_fledged_out (line 269) | fn fully_fledged_out() {
function fully_fleshed_space (line 282) | fn fully_fleshed_space() {
function fully_fleshed_hyphen (line 295) | fn fully_fleshed_hyphen() {
function fully_pledged_space (line 308) | fn fully_pledged_space() {
function fledge_out (line 319) | fn fledge_out() {
function fledged_out_space (line 330) | fn fledged_out_space() {
FILE: harper-core/src/linting/for_noun.rs
type ForNoun (line 12) | pub struct ForNoun {
method default (line 17) | fn default() -> Self {
type Unit (line 27) | type Unit = Chunk;
method expr (line 29) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 33) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 49) | fn description(&self) -> &'static str {
function corrects_fro_basic_correction (line 60) | fn corrects_fro_basic_correction() {
function allows_for_clean (line 69) | fn allows_for_clean() {
function corrects_fro_sure (line 74) | fn corrects_fro_sure() {
FILE: harper-core/src/linting/free_predicate.rs
type FreePredicate (line 10) | pub struct FreePredicate {
method default (line 15) | fn default() -> Self {
type Unit (line 41) | type Unit = Chunk;
method expr (line 43) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 47) | fn match_to_lint(&self, matched_tokens: &[Token], source: &[char]) -> Op...
method description (line 63) | fn description(&self) -> &'static str {
function matches_fee (line 68) | fn matches_fee(token: &Token, source: &[char]) -> bool {
function follows_fee (line 83) | fn follows_fee(token: &Token, _source: &[char]) -> bool {
function linking_like (line 93) | fn linking_like(token: &Token, source: &[char]) -> bool {
function corrects_is_fee_for (line 109) | fn corrects_is_fee_for() {
function corrects_totally_fee (line 118) | fn corrects_totally_fee() {
function corrects_really_fee_to (line 127) | fn corrects_really_fee_to() {
function corrects_fee_with_comma (line 136) | fn corrects_fee_with_comma() {
function corrects_fee_period (line 145) | fn corrects_fee_period() {
function corrects_fee_past_tense (line 154) | fn corrects_fee_past_tense() {
function allows_fee_based (line 163) | fn allows_fee_based() {
function allows_fee_paying (line 168) | fn allows_fee_paying() {
function allows_fee_schedule_statement (line 173) | fn allows_fee_schedule_statement() {
function allows_fee_free_phrase (line 181) | fn allows_fee_free_phrase() {
function counts_single_lint (line 189) | fn counts_single_lint() {
FILE: harper-core/src/linting/friend_of_me.rs
type FriendOfMe (line 8) | pub struct FriendOfMe {
method default (line 13) | fn default() -> Self {
type Unit (line 25) | type Unit = Chunk;
method expr (line 27) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 31) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 59) | fn description(&self) -> &'static str {
function corrects_friend_of_me (line 70) | fn corrects_friend_of_me() {
function corrects_friend_of_you (line 79) | fn corrects_friend_of_you() {
function corrects_friend_of_us (line 88) | fn corrects_friend_of_us() {
function corrects_friends_of_them (line 97) | fn corrects_friends_of_them() {
function corrects_friend_of_him (line 106) | fn corrects_friend_of_him() {
function corrects_friends_of_me (line 115) | fn corrects_friends_of_me() {
function corrects_friends_of_us (line 124) | fn corrects_friends_of_us() {
FILE: harper-core/src/linting/go_so_far_as_to.rs
type GoSoFarAsTo (line 8) | pub struct GoSoFarAsTo {
method default (line 13) | fn default() -> Self {
type Unit (line 24) | type Unit = Chunk;
method expr (line 26) | fn expr(&self) -> &dyn Expr {
method match_to_lint (line 30) | fn match_to_lint(&self, toks: &[Token], src: &[char]) -> Option<Lint> {
method description (line 71) | fn description(&self) -> &'static str {
function go_so_far_to (line 82) | fn go_so_far_to() {
function goes_so_far_to (line 91) | fn goes_so_far_to() {
function gone_so_far_to (line 100) | fn gone_so_far_to() {
function went_so_far_to (line 109) | fn went_so_far_to() {
function went_so_far_to_adverb (line 118) | fn went_so_far_to_adverb() {
function dont_flag_going_so_far_to (line 128) | fn dont_flag_going_so_far_to() {
function dont_flag_goes_so_far_to (line 136) | fn dont_flag_goes_so_far_to() {
function dont_flag_go_so_far_to (line 144) | fn dont_flag_go_so_far_to() {
FILE: harper-core/src/linting/go_to_war.rs
type GoToWar (line 7) | pub struct GoToWar {
method default (line 12) | fn default() -> Self {
type Unit (line 24) | type Unit = Chunk;
method description (line 26) | fn description(&self) -> &str {
metho
Copy disabled (too large)
Download .json
Condensed preview — 1334 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (12,564K chars).
[
{
"path": ".dockerignore",
"chars": 32,
"preview": "target\nbuild\n*.pdf\nnode_modules\n"
},
{
"path": ".editorconfig",
"chars": 34,
"preview": "root = true\n\n[*]\nend_of_line = lf\n"
},
{
"path": ".envrc",
"chars": 10,
"preview": "use flake\n"
},
{
"path": ".gitattributes",
"chars": 96,
"preview": "* text=auto eol=lf\nquill_simple.html linguist-generated\ngithub_textarea.html linguist-generated\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 662,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe the "
},
{
"path": ".github/ISSUE_TEMPLATE/report-false-positive.md",
"chars": 310,
"preview": "---\nname: Report False Positive\nabout: Harper flagged something that's actually correct\ntitle: ''\nlabels: bug, harper-co"
},
{
"path": ".github/ISSUE_TEMPLATE/report-grammatical-error.md",
"chars": 319,
"preview": "---\nname: Report Grammatical Error\nabout: Harper missed a grammatical error\ntitle: ''\nlabels: enhancement, harper-core, "
},
{
"path": ".github/ISSUE_TEMPLATE/suggest-a-feature.md",
"chars": 342,
"preview": "---\nname: Suggest a Feature\nabout: Propose a new feature\ntitle: ''\nlabels: enhancement\n---\n**What problem does this solv"
},
{
"path": ".github/dependabot.yml",
"chars": 196,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"cargo\"\n directory: \"/\"\n schedule:\n interval: \"weekly\"\n - package"
},
{
"path": ".github/pull_request_template.md",
"chars": 740,
"preview": "# Issues \n<!-- Link any relevant GitHub issues here. -->\n<!-- If this PR resolves the issue(s), write closes/fixes/resol"
},
{
"path": ".github/workflows/binaries.yml",
"chars": 5309,
"preview": "name: Binaries\n\non:\n push:\n branches: [\"master\"]\n tags: [\"v*\"]\n merge_group:\n\njobs:\n binaries:\n name: ${{ ma"
},
{
"path": ".github/workflows/build_web.yml",
"chars": 766,
"preview": "name: Build Web\n\non:\n push:\n branches: [\"master\", \"web-prod\"]\n pull_request:\n branches: [\"master\"]\n merge_group"
},
{
"path": ".github/workflows/chrome_plugin.yml",
"chars": 1405,
"preview": "name: Chrome Plugin\n\non:\n push:\n branches: [\"master\"]\n tags: [\"v*\"]\n pull_request:\n branches: [\"master\"]\n me"
},
{
"path": ".github/workflows/just_checks.yml",
"chars": 1332,
"preview": "name: Just Checks\n\non:\n push:\n branches: [\"master\", \"web-prod\"]\n pull_request:\n branches: [\"master\"]\n merge_gro"
},
{
"path": ".github/workflows/stale.yml",
"chars": 1535,
"preview": "# Adapted from [Jeff Geerling's Stale Workflow](https://github.com/geerlingguy/mac-dev-playbook/blob/719de3569804fcf4974"
},
{
"path": ".github/workflows/vscode_plugin.yml",
"chars": 3468,
"preview": "name: VS Code Plugin\n\non:\n push:\n branches: [\"master\"]\n tags: [\"v*\"]\n merge_group:\n\njobs:\n vscode-plugin:\n n"
},
{
"path": ".github/workflows/wp_plugin.yml",
"chars": 1050,
"preview": "name: WordPress Plugin\n\non:\n push:\n branches: [\"master\"]\n tags: [\"v*\"]\n pull_request:\n branches: [\"master\"]\n "
},
{
"path": ".gitignore",
"chars": 102,
"preview": "target\nbuild\n.idea\n.vscode\n.DS_Store\n*.pdf\nnode_modules\nmariadb_data\n\n# Ignore direnv files\n.direnv/*\n"
},
{
"path": ".node-version",
"chars": 5,
"preview": "lts/*"
},
{
"path": ".npmrc",
"chars": 36,
"preview": "registry=https://registry.npmjs.org\n"
},
{
"path": "AGENTS.md",
"chars": 11009,
"preview": "# Harper Docs Map for Agents\n\nThis repository’s documentation site is powered by Vite + SvelteKit + SveltePress.\n\nUse `p"
},
{
"path": "ARCHITECTURE.md",
"chars": 145,
"preview": "# Harper's Architecture\n\nThis document has been moved to the [online documentation](https://writewithharper.com/docs/con"
},
{
"path": "COMPARISON.md",
"chars": 1751,
"preview": "# Comparison to Other Grammar Checkers\n\n| | Suggestion Time | License | LSP Support "
},
{
"path": "CONTRIBUTING.md",
"chars": 130,
"preview": "# Contributing\n\nThis page has been moved to [the main documentation](https://writewithharper.com/docs/contributors/intro"
},
{
"path": "Cargo.toml",
"chars": 712,
"preview": "[workspace]\nmembers = [\"harper-cli\", \"harper-core\", \"harper-ls\", \"harper-comments\", \"harper-wasm\", \"harper-tree-sitter\","
},
{
"path": "Dockerfile",
"chars": 1509,
"preview": "# This Dockerfile is for the Harper website and web services.\n# You do not need it to use Harper.\n\nARG NODE_VERSION=24\n\n"
},
{
"path": "LICENSE",
"chars": 11343,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 3884,
"preview": "<div id=\"header\" align=\"center\">\n <img src=\"logo.svg\" width=\"400px\" />\n <h1>Harper</h1>\n</div>\n\n[![Harper Binaries"
},
{
"path": "biome.json",
"chars": 2244,
"preview": "{\n\t\"$schema\": \"https://biomejs.dev/schemas/2.3.3/schema.json\",\n\t\"vcs\": {\n\t\t\"enabled\": true,\n\t\t\"clientKind\": \"git\",\n\t\t\"us"
},
{
"path": "demo.md",
"chars": 739,
"preview": "There are some cases where the the standard grammar\ncheckers don't cut it. That;s where Harper comes in handy.\n\nHarper i"
},
{
"path": "docker-compose.dev.yml",
"chars": 547,
"preview": "# This Docker compose file is for development of the Harper website and web services.\n# You do not need it to use Harper"
},
{
"path": "docker-compose.yml",
"chars": 822,
"preview": "# This Docker compose file is for development of the Harper website and web services.\n# You do not need it to use Harper"
},
{
"path": "flake.nix",
"chars": 2893,
"preview": "{\n inputs = {\n utils.url = \"github:numtide/flake-utils\";\n };\n outputs =\n {\n self,\n nixpkgs,\n uti"
},
{
"path": "fuzz/.gitignore",
"chars": 33,
"preview": "target\ncorpus\nartifacts\ncoverage\n"
},
{
"path": "fuzz/Cargo.toml",
"chars": 1026,
"preview": "[package]\nname = \"fuzz\"\nversion = \"0.0.0\"\npublish = false\nedition = \"2024\"\n\n[package.metadata]\ncargo-fuzz = true\n\n[depen"
},
{
"path": "fuzz/README.md",
"chars": 1336,
"preview": "# cargo-fuzz targets\n\n## Setup\n\nFollow the rust-fuzz [setup guide](https://rust-fuzz.github.io/book/cargo-fuzz/setup.htm"
},
{
"path": "fuzz/fuzz_targets/fuzz_harper_comment.rs",
"chars": 1642,
"preview": "#![no_main]\n\nuse harper_core::parsers::{MarkdownOptions, StrParser};\nuse libfuzzer_sys::arbitrary::{Arbitrary, Result, U"
},
{
"path": "fuzz/fuzz_targets/fuzz_harper_core_markdown.rs",
"chars": 264,
"preview": "#![no_main]\n\nuse harper_core::parsers::{Markdown, MarkdownOptions, StrParser};\nuse libfuzzer_sys::fuzz_target;\n\nfuzz_tar"
},
{
"path": "fuzz/fuzz_targets/fuzz_harper_html.rs",
"chars": 207,
"preview": "#![no_main]\n\nuse harper_core::parsers::StrParser;\nuse libfuzzer_sys::fuzz_target;\n\nfuzz_target!(|data: &str| {\n let p"
},
{
"path": "fuzz/fuzz_targets/fuzz_harper_literate_haskell.rs",
"chars": 225,
"preview": "#![no_main]\n\n// use harper_core::parsers::StrParser;\nuse libfuzzer_sys::fuzz_target;\n\nfuzz_target!(|_data: &str| {\n /"
},
{
"path": "fuzz/fuzz_targets/fuzz_harper_typst.rs",
"chars": 190,
"preview": "#![no_main]\n\nuse harper_core::parsers::StrParser;\nuse libfuzzer_sys::fuzz_target;\n\nfuzz_target!(|data: &str| {\n let t"
},
{
"path": "harper-asciidoc/Cargo.toml",
"chars": 443,
"preview": "[package]\nname = \"harper-asciidoc\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developer"
},
{
"path": "harper-asciidoc/src/lib.rs",
"chars": 1047,
"preview": "use harper_core::parsers::{self, Parser, PlainEnglish};\nuse harper_core::{Token, TokenKind};\nuse harper_tree_sitter::Tre"
},
{
"path": "harper-asciidoc/tests/asciidoc_tests.rs",
"chars": 1487,
"preview": "use harper_asciidoc::AsciidocParser;\nuse harper_core::linting::{LintGroup, Linter};\nuse harper_core::spell::FstDictionar"
},
{
"path": "harper-asciidoc/tests/test_sources/basic.adoc",
"chars": 73,
"preview": "= This is a titlle\n\nThis is a basic paragraph with a typo here: mstakes.\n"
},
{
"path": "harper-asciidoc/tests/test_sources/comment.adoc",
"chars": 78,
"preview": "// This is a comment with a typo: spelll\n// Another line of the same comment.\n"
},
{
"path": "harper-asciidoc/tests/test_sources/comprehensive.adoc",
"chars": 497,
"preview": "= Document Title\nAuthor Name <author@example.com>\n:revdate: 2026-01-01\n:custom-attr: Value with typpo.\n\nThis is a paragr"
},
{
"path": "harper-asciidoc/tests/test_sources/table.adoc",
"chars": 53,
"preview": "|===\n| Cell 1 | Cell 2, but with a typo: errorr\n|===\n"
},
{
"path": "harper-brill/Cargo.toml",
"chars": 352,
"preview": "[package]\nname = \"harper-brill\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\""
},
{
"path": "harper-brill/finished_chunker/vocab.json",
"chars": 627232,
"preview": "{\n\t\"kicked\": 8723,\n\t\"ADPL\": 12418,\n\t\"Stirling\": 4479,\n\t\"proper\": 1178,\n\t\"blond-haired\": 30464,\n\t\"unitary\": 14934,\n\t\"hype"
},
{
"path": "harper-brill/src/lib.rs",
"chars": 2028,
"preview": "use std::num::NonZero;\nuse std::rc::Rc;\nuse std::sync::{Arc, LazyLock};\n\npub use harper_pos_utils::{\n BrillChunker, B"
},
{
"path": "harper-brill/trained_chunker_model.json",
"chars": 52717,
"preview": "{\n\t\"base\": {\n\t\t\"counts\": {\n\t\t\t\"ADP\": -40685,\n\t\t\t\"VERB\": -47220,\n\t\t\t\"CCONJ\": -14576,\n\t\t\t\"PROPN\": 17155,\n\t\t\t\"ADJ\": -8207,\n"
},
{
"path": "harper-brill/trained_tagger_model.json",
"chars": 659439,
"preview": "{\n\t\"base\": {\n\t\t\"mapping\": {\n\t\t\t\"dame\": \"PROPN\",\n\t\t\t\"associate\": \"NOUN\",\n\t\t\t\"obscurity\": \"NOUN\",\n\t\t\t\"ivan\": \"PROPN\",\n\t\t\t\""
},
{
"path": "harper-cli/Cargo.toml",
"chars": 1298,
"preview": "[package]\nname = \"harper-cli\"\nversion = \"0.1.0\"\nedition = \"2024\"\npublish = false\nrepository = \"https://github.com/automa"
},
{
"path": "harper-cli/README.md",
"chars": 508,
"preview": "# `harper-cli`\n\n## What?\n\n`harper-cli` is a small, experimental frontend for Harper.\nIt can be used in any situation whe"
},
{
"path": "harper-cli/src/annotate.rs",
"chars": 6089,
"preview": "use std::{borrow::Cow, ops::Range};\n\nuse ariadne::{Color, Label, Report, ReportKind};\nuse clap::ValueEnum;\nuse harper_co"
},
{
"path": "harper-cli/src/input/multi_input.rs",
"chars": 2399,
"preview": "use std::{borrow::Cow, path::PathBuf};\n\nuse enum_dispatch::enum_dispatch;\nuse strum_macros::EnumTryAs;\n\nuse crate::input"
},
{
"path": "harper-cli/src/input/single_input.rs",
"chars": 6930,
"preview": "use std::path::Path;\nuse std::{borrow::Cow, io::Read, path::PathBuf};\n\nuse enum_dispatch::enum_dispatch;\nuse strum_macro"
},
{
"path": "harper-cli/src/input.rs",
"chars": 2097,
"preview": "use std::borrow::Cow;\n\nuse enum_dispatch::enum_dispatch;\nuse strum_macros::EnumTryAs;\n\npub mod single_input;\nuse single_"
},
{
"path": "harper-cli/src/lint.rs",
"chars": 33055,
"preview": "use std::borrow::Cow;\nuse std::collections::BTreeMap;\nuse std::path::{Component, Path, PathBuf};\nuse std::sync::Arc;\nuse"
},
{
"path": "harper-cli/src/main.rs",
"chars": 38831,
"preview": "#![doc = include_str!(\"../README.md\")]\n\nuse harper_core::spell::{Dictionary, FstDictionary, MutableDictionary, WordId};\n"
},
{
"path": "harper-cli/tests/no_color.rs",
"chars": 1384,
"preview": "use std::process::Command;\n\nfn harper_cli() -> Command {\n Command::new(env!(\"CARGO_BIN_EXE_harper-cli\"))\n}\n\n/// Input"
},
{
"path": "harper-cli/tests/output_format.rs",
"chars": 5270,
"preview": "use std::io::Write;\nuse std::process::Command;\n\nfn harper_cli() -> Command {\n Command::new(env!(\"CARGO_BIN_EXE_harper"
},
{
"path": "harper-comments/Cargo.toml",
"chars": 1246,
"preview": "[package]\nname = \"harper-comments\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developer"
},
{
"path": "harper-comments/README.md",
"chars": 412,
"preview": "# `harper-comments`\n\nThis crate holds a number of functions, but it is primarily a wrapper around `tree-sitter` that all"
},
{
"path": "harper-comments/src/comment_parser.rs",
"chars": 5590,
"preview": "use std::path::Path;\n\nuse crate::comment_parsers;\nuse comment_parsers::{Go, JavaDoc, JsDoc, Lua, Solidity, Unit};\nuse ha"
},
{
"path": "harper-comments/src/comment_parsers/go.rs",
"chars": 1234,
"preview": "use harper_core::Lrc;\nuse harper_core::Token;\nuse harper_core::parsers::{Markdown, MarkdownOptions, Parser};\n\nuse super:"
},
{
"path": "harper-comments/src/comment_parsers/javadoc.rs",
"chars": 2297,
"preview": "use std::collections::VecDeque;\n\nuse harper_core::parsers::Parser;\nuse harper_core::{Punctuation, Token, TokenKind, VecE"
},
{
"path": "harper-comments/src/comment_parsers/jsdoc.rs",
"chars": 6650,
"preview": "use harper_core::Lrc;\nuse harper_core::parsers::{Markdown, MarkdownOptions, Parser};\nuse harper_core::{Punctuation, Span"
},
{
"path": "harper-comments/src/comment_parsers/lua.rs",
"chars": 2101,
"preview": "use harper_core::Lrc;\nuse harper_core::Span;\nuse harper_core::Token;\nuse harper_core::parsers::{Markdown, MarkdownOption"
},
{
"path": "harper-comments/src/comment_parsers/mod.rs",
"chars": 1340,
"preview": "mod go;\nmod javadoc;\nmod jsdoc;\nmod lua;\nmod solidity;\nmod unit;\n\npub use go::Go;\nuse harper_core::Span;\npub use javadoc"
},
{
"path": "harper-comments/src/comment_parsers/solidity.rs",
"chars": 2109,
"preview": "use harper_core::Lrc;\nuse harper_core::Span;\nuse harper_core::Token;\nuse harper_core::parsers::{MarkdownOptions, Parser}"
},
{
"path": "harper-comments/src/comment_parsers/unit.rs",
"chars": 2332,
"preview": "use harper_core::Lrc;\nuse harper_core::parsers::{Markdown, MarkdownOptions, Parser};\nuse harper_core::{Span, Token};\n\nus"
},
{
"path": "harper-comments/src/lib.rs",
"chars": 132,
"preview": "#![doc = include_str!(\"../README.md\")]\n\nmod comment_parser;\nmod comment_parsers;\nmod masker;\npub use comment_parser::Com"
},
{
"path": "harper-comments/src/masker.rs",
"chars": 1939,
"preview": "use harper_core::Masker;\nuse harper_core::spell::MutableDictionary;\nuse harper_tree_sitter::TreeSitterMasker;\n\npub struc"
},
{
"path": "harper-comments/tests/language_support.rs",
"chars": 3126,
"preview": "use std::path::Path;\n\nuse harper_comments::CommentParser;\nuse harper_core::linting::{LintGroup, Linter};\nuse harper_core"
},
{
"path": "harper-comments/tests/language_support_sources/basic.clj",
"chars": 1869,
"preview": "(ns clean\n \"It is actually possible to document a ns.\n It's a nice place to describe the purpose of the namespace and "
},
{
"path": "harper-comments/tests/language_support_sources/basic_groovy.groovy",
"chars": 54,
"preview": "// This commment has one typo.\ndef greeting = \"hello\"\n"
},
{
"path": "harper-comments/tests/language_support_sources/basic_kotlin.kt",
"chars": 5253,
"preview": "// *************************************************************************************************\n// A diminutive bu"
},
{
"path": "harper-comments/tests/language_support_sources/clean.lua",
"chars": 157,
"preview": "---@meta\n\n---@alias MyCustomType integer\n\n---Calculate a value using [my custom type](lua://MyCustomType)\n---@param x My"
},
{
"path": "harper-comments/tests/language_support_sources/clean.ps1",
"chars": 265,
"preview": "# This is an example PowerShell file with clean comments.\n\n<#\nThis block comment should also lint cleanly.\nIt includes m"
},
{
"path": "harper-comments/tests/language_support_sources/clean.rs",
"chars": 906,
"preview": "/// This is an example Rust file that should produce no Harper lints.\n\nstruct TestStruct {}\n\nimpl TestStruct {\n /// T"
},
{
"path": "harper-comments/tests/language_support_sources/clean.sol",
"chars": 1048,
"preview": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.20;\n\n/// This is an example Solidity file that should produc"
},
{
"path": "harper-comments/tests/language_support_sources/clean.zig",
"chars": 228,
"preview": "//! Top-level module documentation.\n\n/// Main entry point.\npub fn main() void {\n // Regular comment.\n const x: i32"
},
{
"path": "harper-comments/tests/language_support_sources/common.mill",
"chars": 498,
"preview": "import mill._, scalalib._\n\nobject hello extends ScalaModule {\n def scalaVersion = \"2.13.8\"\n\n // Define third-party dep"
},
{
"path": "harper-comments/tests/language_support_sources/complex_gradle_build.gradle",
"chars": 366,
"preview": "plugins {\n id 'java-library'\n}\n\nrepositories {\n mavenCentral()\n}\n\ndependencies {\n implementation 'org.slf4j:slf"
},
{
"path": "harper-comments/tests/language_support_sources/complex_groovy_block_comments.groovy",
"chars": 635,
"preview": "/*\n * This module-level commment sits above imports and class declarations.\n * It intentionally includes punctuation, sy"
},
{
"path": "harper-comments/tests/language_support_sources/complex_groovy_strings_regex.groovy",
"chars": 343,
"preview": "class ParserLikeExample {\n static void main(String[] args) {\n String url = \"https://example.com/path?foo=bar//"
},
{
"path": "harper-comments/tests/language_support_sources/dirty.lua",
"chars": 189,
"preview": "---@meta\n\n---@alias MyCustomType integer\n\n---Calculate a value using [my custom type](lua://MyCustomType)\n---\n--- This c"
},
{
"path": "harper-comments/tests/language_support_sources/dirty.zig",
"chars": 223,
"preview": "//! This module demonstrates various comment types.\n\n/// This doc comment has a mispelling: teh quick brown fox.\npub fn "
},
{
"path": "harper-comments/tests/language_support_sources/empty.js",
"chars": 51,
"preview": "// This is an empty file, apart from this comment.\n"
},
{
"path": "harper-comments/tests/language_support_sources/eof.rs",
"chars": 95,
"preview": "fn main() {}\n// This is a test to ensure Harper doesn't crash on comments at the end of files.\n"
},
{
"path": "harper-comments/tests/language_support_sources/ignore_comments.c",
"chars": 93,
"preview": "// This comment is spellcheckd\nint main() {\n // spellchecker:ignore Thear be code in here\n}\n"
},
{
"path": "harper-comments/tests/language_support_sources/ignore_comments.ps1",
"chars": 232,
"preview": "# spellcheck:ignore splling error\n# Ths applies to this entire comment block.\n\n$foo = 1\n\n# spellchecker: ignore ths vari"
},
{
"path": "harper-comments/tests/language_support_sources/ignore_comments.rs",
"chars": 206,
"preview": "/// spellcheck:ignore splling error\n/// This applies to the entire comment block\n#[derive(Debug)]\n/// Ths comment block "
},
{
"path": "harper-comments/tests/language_support_sources/ignore_comments.sol",
"chars": 315,
"preview": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.20;\n\n/// spellcheck:ignore splling error\n/// Ths applies to "
},
{
"path": "harper-comments/tests/language_support_sources/ignore_shebang_1.sh",
"chars": 74,
"preview": "#!/bin/sh\n# This is a test to make sure that we don't lint shebang lines.\n"
},
{
"path": "harper-comments/tests/language_support_sources/ignore_shebang_2.sh",
"chars": 83,
"preview": "#! /usr/bin/env sh\n# This is a test to make sure that we don't lint shebang lines.\n"
},
{
"path": "harper-comments/tests/language_support_sources/ignore_shebang_3.sh",
"chars": 83,
"preview": "#!/usr/bin/python3\n# This is a test to make sure that we don't lint shebang lines.\n"
},
{
"path": "harper-comments/tests/language_support_sources/ignore_shebang_4.sh",
"chars": 83,
"preview": "#/bin/sh\n# This is a test to make sure that we don't ignore invalid shebang lines.\n"
},
{
"path": "harper-comments/tests/language_support_sources/issue_1097.lua",
"chars": 133,
"preview": "---Starting with something capitalized, but without dot at the end\n---@type table<string, string>\nlocal f = {} -- ending"
},
{
"path": "harper-comments/tests/language_support_sources/issue_132.rs",
"chars": 115,
"preview": "/// ```\n/// println!(\"Test\");\n/// ```\n///\n/// This shoud get checked.\nfn main() {\n println!(\"Hello, world!\");\n}\n"
},
{
"path": "harper-comments/tests/language_support_sources/issue_229.c",
"chars": 3,
"preview": "// "
},
{
"path": "harper-comments/tests/language_support_sources/issue_229.cs",
"chars": 3,
"preview": "// "
},
{
"path": "harper-comments/tests/language_support_sources/issue_229.js",
"chars": 3,
"preview": "// "
},
{
"path": "harper-comments/tests/language_support_sources/issue_96.lua",
"chars": 459,
"preview": "-- Below, we have a situation where the line terminates and should end the sentence.\n\nlocal alphabet = {\n [1] = \"a\", -"
},
{
"path": "harper-comments/tests/language_support_sources/issue_96.rb",
"chars": 364,
"preview": "# Below, we have a situation where the line terminates and should end the sentence.\n\nalphabet = [\n \"a\", # This is a tes"
},
{
"path": "harper-comments/tests/language_support_sources/javadoc_clean_simple.java",
"chars": 194,
"preview": "class TestClass {\n\n /**\n * This is a JavaDoc without any of the fancy frills that come with it.\n */\n public static"
},
{
"path": "harper-comments/tests/language_support_sources/javadoc_complex.java",
"chars": 704,
"preview": "class TestClass {\n /**\n * This is a JavaDoc with <i>many</i> of the fancy frills that come with it.\n *\n * <p>\n "
},
{
"path": "harper-comments/tests/language_support_sources/jsdoc.ts",
"chars": 616,
"preview": "/** This is a doc comment.\n * Since there are no keywords it _sould_ be checked. */\nfunction test(){}\n\n/** This is also"
},
{
"path": "harper-comments/tests/language_support_sources/laravel_app.php",
"chars": 4283,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Applicatio"
},
{
"path": "harper-comments/tests/language_support_sources/merged_lines.ts",
"chars": 410,
"preview": "// This is a test to make sure we don't split up paragraphs on newlines.\n// This should be the same sentence,\n// this sh"
},
{
"path": "harper-comments/tests/language_support_sources/multiline_comments.cpp",
"chars": 326,
"preview": "/// This is an example of an problematic comment.\n/// It should produce one error.\nint test() {}\n\n/***\n * This is an exa"
},
{
"path": "harper-comments/tests/language_support_sources/multiline_comments.sol",
"chars": 392,
"preview": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.20;\n\n/// This is an example of an problematic comment.\n/// I"
},
{
"path": "harper-comments/tests/language_support_sources/multiline_comments.ts",
"chars": 332,
"preview": "// This is an example of an problematic comment\n// It should produce one error\nfunction test() {}\n\n/***\n * This is an ex"
},
{
"path": "harper-core/Cargo.toml",
"chars": 1498,
"preview": "[package]\nname = \"harper-core\"\nversion = \"1.12.0\"\nedition = \"2024\"\ndescription = \"The language checker for developers.\"\n"
},
{
"path": "harper-core/README.md",
"chars": 1744,
"preview": "# `harper-core`\n\n`harper-core` is the fundamental engine behind [Harper](https://writewithharper.com), the private gramm"
},
{
"path": "harper-core/annotations.json",
"chars": 17065,
"preview": "{\n\t\"affixes\": {\n\t\t\"K\": {\n\t\t\t\"#\": \"'pro-' prefix\",\n\t\t\t\"kind\": \"prefix\",\n\t\t\t\"cross_product\": true,\n\t\t\t\"replacements\": [\n\t\t"
},
{
"path": "harper-core/benches/essay.md",
"chars": 11406,
"preview": "The question of why we do anything at all is one of those profound, irritatingly unanswerable riddles that philosophers "
},
{
"path": "harper-core/benches/parse_essay.rs",
"chars": 1367,
"preview": "use criterion::{Criterion, criterion_group, criterion_main};\nuse harper_core::linting::{LintGroup, Linter};\nuse harper_c"
},
{
"path": "harper-core/build.rs",
"chars": 1292,
"preview": "use std::{env, fs, path::PathBuf};\n\nfn main() {\n let manifest_dir = PathBuf::from(env::var(\"CARGO_MANIFEST_DIR\").unwr"
},
{
"path": "harper-core/clippy.toml",
"chars": 78,
"preview": "disallowed-types = [\"std::collections::HashMap\", \"std::collections::HashSet\"]\n"
},
{
"path": "harper-core/dictionary.dict",
"chars": 775241,
"preview": "54500\n\n# Start of original dictionary import\n# combined with dialect spelling dictionary import.\n# This section is sorte"
},
{
"path": "harper-core/irregular_nouns.json",
"chars": 4439,
"preview": "[\n\t\"// comments can appear in the line before an entry\",\n\t\"// or in place of an entry\",\n\t[\"addendum\", \"addenda\"],\n\t[\"air"
},
{
"path": "harper-core/irregular_verbs.json",
"chars": 4242,
"preview": "[\n\t\"// comments can appear in the line before an entry\",\n\t\"// or in place of an entry\",\n\t[\"arise\", \"arose\", \"arisen\"],\n\t"
},
{
"path": "harper-core/proper_noun_rules.json",
"chars": 13814,
"preview": "{\n\t\"Americas\": {\n\t\t\"canonical\": [\"South America\", \"North America\", \"Central America\"],\n\t\t\"description\": \"When referring "
},
{
"path": "harper-core/src/case.rs",
"chars": 3389,
"preview": "use std::borrow::Borrow;\n\nuse smallvec::SmallVec;\n\nuse crate::{CharString, char_string::CHAR_STRING_INLINE_SIZE};\n\n/// A"
},
{
"path": "harper-core/src/char_ext.rs",
"chars": 3696,
"preview": "use unicode_script::{Script, UnicodeScript};\nuse unicode_width::UnicodeWidthChar;\n\nuse crate::Punctuation;\n\nmod private "
},
{
"path": "harper-core/src/char_string.rs",
"chars": 8588,
"preview": "use crate::char_ext::CharExt;\nuse std::borrow::Cow;\n\nuse smallvec::SmallVec;\n\n// TODO: remove this when `SmallVec` allow"
},
{
"path": "harper-core/src/currency.rs",
"chars": 2189,
"preview": "use is_macro::Is;\nuse serde::{Deserialize, Serialize};\n\nuse crate::Number;\n\n/// A national or international currency\n#[d"
},
{
"path": "harper-core/src/dict_word_metadata.rs",
"chars": 65925,
"preview": "use harper_brill::UPOS;\nuse is_macro::Is;\nuse itertools::Itertools;\nuse paste::paste;\nuse serde::{Deserialize, Serialize"
},
{
"path": "harper-core/src/dict_word_metadata_orthography.rs",
"chars": 13820,
"preview": "use crate::CharStringExt;\nuse crate::char_ext::CharExt;\nuse serde::{Deserialize, Serialize};\n\n/// Orthography informatio"
},
{
"path": "harper-core/src/document.rs",
"chars": 48113,
"preview": "use std::cmp::Ordering;\nuse std::collections::VecDeque;\nuse std::fmt::Display;\n\nuse harper_brill::{Chunker, Tagger, bril"
},
{
"path": "harper-core/src/edit_distance.rs",
"chars": 2689,
"preview": "// Computes the Levenshtein edit distance between two patterns.\n// This is accomplished via a memory-optimized Wagner-Fi"
},
{
"path": "harper-core/src/expr/all.rs",
"chars": 1173,
"preview": "use crate::{Span, Token, expr::Expr};\n\n/// An [`Expr`] that matches against tokens if and only if all of its children do"
},
{
"path": "harper-core/src/expr/anchor_end.rs",
"chars": 1403,
"preview": "use crate::Token;\n\nuse super::Step;\n\n/// A [`Step`] which will match only if the cursor is over the last non-whitespace "
},
{
"path": "harper-core/src/expr/anchor_start.rs",
"chars": 1092,
"preview": "use crate::{Token, TokenStringExt};\n\nuse super::Step;\n\n/// A [`Step`] which will match only if the cursor is over the fi"
},
{
"path": "harper-core/src/expr/duration_expr.rs",
"chars": 1578,
"preview": "use crate::patterns::{IndefiniteArticle, WordSet};\nuse crate::{Span, Token};\n\nuse super::{Expr, SequenceExpr, SpelledNum"
},
{
"path": "harper-core/src/expr/expr_map.rs",
"chars": 1675,
"preview": "use crate::LSend;\nuse crate::Span;\nuse crate::Token;\n\nuse super::Expr;\n\n/// A map from an [`Expr`] to arbitrary data.\n//"
},
{
"path": "harper-core/src/expr/filter.rs",
"chars": 2060,
"preview": "use crate::{Span, Token};\n\nuse super::Expr;\n\n/// An expression that wraps other expressions to build a filter-line pipel"
},
{
"path": "harper-core/src/expr/first_match_of.rs",
"chars": 874,
"preview": "use super::Expr;\nuse crate::{Span, Token};\n\n/// A naive expr collection that naively iterates through a list of patterns"
},
{
"path": "harper-core/src/expr/fixed_phrase.rs",
"chars": 3569,
"preview": "use crate::parsers::PlainEnglish;\nuse crate::patterns::Word;\nuse crate::{Document, Span, Token, TokenKind};\n\nuse super::"
},
{
"path": "harper-core/src/expr/longest_match_of.rs",
"chars": 696,
"preview": "use crate::{Span, Token, expr::Expr};\n\n/// An [`Expr`] that returns the farthest offset of the longest match in a list o"
},
{
"path": "harper-core/src/expr/mergeable_words.rs",
"chars": 5089,
"preview": "use std::sync::Arc;\n\nuse super::{Expr, SequenceExpr};\nuse crate::spell::{Dictionary, FstDictionary};\nuse crate::{CharStr"
},
{
"path": "harper-core/src/expr/mod.rs",
"chars": 6031,
"preview": "//! An `Expr` is a declarative way to express whether a certain set of tokens fulfill a criteria.\n//!\n//! For example, i"
},
{
"path": "harper-core/src/expr/optional.rs",
"chars": 668,
"preview": "use crate::{Span, Token};\n\nuse super::Expr;\n\n/// An optional expression.\n/// Forces the optional expression to always re"
},
{
"path": "harper-core/src/expr/reflexive_pronoun.rs",
"chars": 6045,
"preview": "use crate::{\n Span, Token,\n expr::{Expr, FirstMatchOf},\n patterns::WordSet,\n};\n\n// These are considered ungramm"
},
{
"path": "harper-core/src/expr/repeating.rs",
"chars": 2265,
"preview": "use super::Expr;\nuse crate::{Span, Token};\n\n/// An expression that will match one or more repetitions of the same expres"
},
{
"path": "harper-core/src/expr/sequence_expr.rs",
"chars": 23405,
"preview": "use paste::paste;\n\nuse crate::{\n CharStringExt, Lrc, Span, Token, TokenKind,\n expr::{FirstMatchOf, FixedPhrase, Lo"
},
{
"path": "harper-core/src/expr/similar_to_phrase.rs",
"chars": 2517,
"preview": "use crate::patterns::{WithinEditDistance, Word};\nuse crate::{Document, Span, Token, TokenKind};\n\nuse super::{Expr, Seque"
},
{
"path": "harper-core/src/expr/space_or_hyphen.rs",
"chars": 566,
"preview": "use crate::expr::FirstMatchOf;\nuse crate::patterns::WhitespacePattern;\nuse crate::{Span, Token};\n\nuse super::Expr;\n\n/// "
},
{
"path": "harper-core/src/expr/spelled_number_expr.rs",
"chars": 6174,
"preview": "use crate::expr::LongestMatchOf;\nuse crate::patterns::{WhitespacePattern, WordSet};\nuse crate::{Span, Token};\n\nuse super"
},
{
"path": "harper-core/src/expr/step.rs",
"chars": 624,
"preview": "use crate::{LSend, Token, patterns::Pattern};\n\n/// An atomic step within a larger expression.\n///\n/// Its principle job "
},
{
"path": "harper-core/src/expr/time_unit_expr.rs",
"chars": 2257,
"preview": "use crate::expr::LongestMatchOf;\nuse crate::patterns::WordSet;\nuse crate::{Span, Token};\n\nuse super::Expr;\n\n/// Matches "
},
{
"path": "harper-core/src/expr/unless_step.rs",
"chars": 738,
"preview": "use crate::{Token, expr::Expr};\n\nuse super::Step;\n\n/// Provides the ability to use an expression as a condition.\n/// If "
},
{
"path": "harper-core/src/expr/word_expr_group.rs",
"chars": 1489,
"preview": "use hashbrown::HashMap;\n\nuse super::first_match_of::FirstMatchOf;\nuse super::{Expr, SequenceExpr};\nuse crate::{CharStrin"
},
{
"path": "harper-core/src/fat_token.rs",
"chars": 992,
"preview": "use serde::{Deserialize, Serialize};\n\nuse crate::{CharStringExt, TokenKind};\n\n/// A [`Token`](crate::Token) that holds i"
},
{
"path": "harper-core/src/ignored_lints/lint_context.rs",
"chars": 1677,
"preview": "use std::hash::{DefaultHasher, Hash, Hasher};\n\nuse serde::{Deserialize, Serialize};\n\nuse crate::{\n Document, FatToken"
},
{
"path": "harper-core/src/ignored_lints/mod.rs",
"chars": 4199,
"preview": "mod lint_context;\n\nuse hashbrown::HashSet;\npub use lint_context::LintContext;\nuse serde::{Deserialize, Serialize};\n\nuse "
},
{
"path": "harper-core/src/indefinite_article.rs",
"chars": 6016,
"preview": "use std::borrow::Cow;\n\nuse itertools::Itertools;\n\nuse crate::case::Case::Upper;\nuse crate::char_ext::CharExt;\nuse crate:"
},
{
"path": "harper-core/src/irregular_nouns.rs",
"chars": 3209,
"preview": "use serde::Deserialize;\nuse std::sync::{Arc, LazyLock};\n\ntype Noun = (String, String);\n\n#[derive(Debug, Deserialize)]\npu"
},
{
"path": "harper-core/src/irregular_verbs.rs",
"chars": 3819,
"preview": "use serde::Deserialize;\nuse std::sync::{Arc, LazyLock};\n\ntype Verb = (String, String, String);\n\n#[derive(Debug, Deserial"
},
{
"path": "harper-core/src/language_detection.rs",
"chars": 3886,
"preview": "//! This module implements rudimentary, dictionary-based English language detection.\n\nuse crate::spell::Dictionary;\nuse "
},
{
"path": "harper-core/src/lexing/email_address.rs",
"chars": 5469,
"preview": "use itertools::Itertools;\n\nuse super::FoundToken;\nuse super::hostname::lex_hostname;\nuse crate::TokenKind;\n\n/// The maxi"
},
{
"path": "harper-core/src/lexing/hostname.rs",
"chars": 2895,
"preview": "use crate::TokenKind;\n\nuse super::FoundToken;\n\n/// Lex a hostname token.\npub fn lex_hostname_token(source: &[char]) -> O"
},
{
"path": "harper-core/src/lexing/mod.rs",
"chars": 24629,
"preview": "mod email_address;\nmod hostname;\nmod url;\n\nuse hostname::lex_hostname_token;\nuse ordered_float::OrderedFloat;\nuse url::l"
},
{
"path": "harper-core/src/lexing/url.rs",
"chars": 5821,
"preview": "/// This module implements parsing of URIs.\n/// See RFC 1738 for more information.\nuse super::{FoundToken, hostname::lex"
},
{
"path": "harper-core/src/lib.rs",
"chars": 6187,
"preview": "#![doc = include_str!(\"../README.md\")]\n#![allow(dead_code)]\n\nmod case;\nmod char_ext;\nmod char_string;\nmod currency;\nmod "
},
{
"path": "harper-core/src/linting/a_part.rs",
"chars": 8844,
"preview": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::FixedPhrase;\nuse crate::linting::expr_linter::Chu"
},
{
"path": "harper-core/src/linting/a_while.rs",
"chars": 3657,
"preview": "use harper_brill::UPOS;\n\nuse crate::char_string::char_string;\nuse crate::expr::{Expr, ExprMap, SequenceExpr};\nuse crate:"
},
{
"path": "harper-core/src/linting/addicting.rs",
"chars": 4137,
"preview": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n Token,\n expr::{All, AnchorEnd, Expr, FirstMatchOf, LongestMa"
},
{
"path": "harper-core/src/linting/adjective_double_degree.rs",
"chars": 7375,
"preview": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n CharStringExt, Token, TokenStringExt,\n expr::{Expr, Sequence"
},
{
"path": "harper-core/src/linting/adjective_of_a.rs",
"chars": 20085,
"preview": "use super::{Lint, LintKind, Linter, Suggestion};\nuse crate::{Document, Span, TokenStringExt};\n\n/// Detect sequences of w"
},
{
"path": "harper-core/src/linting/after_later.rs",
"chars": 4935,
"preview": "use crate::Token;\nuse crate::expr::{DurationExpr, Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate"
},
{
"path": "harper-core/src/linting/all_hell_break_loose.rs",
"chars": 2916,
"preview": "use crate::{\n Lint, Token,\n expr::{Expr, SequenceExpr},\n linting::{ExprLinter, LintKind, Suggestion, expr_linte"
},
{
"path": "harper-core/src/linting/all_intents_and_purposes.rs",
"chars": 11679,
"preview": "use crate::Token;\nuse crate::char_string::CharStringExt;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr"
},
{
"path": "harper-core/src/linting/allow_to.rs",
"chars": 3217,
"preview": "use crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{ExprLinter, Lint, Li"
},
{
"path": "harper-core/src/linting/am_in_the_morning.rs",
"chars": 9928,
"preview": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n Span, Token, TokenStringExt,\n expr::{Expr, FixedPhrase, Long"
},
{
"path": "harper-core/src/linting/amounts_for.rs",
"chars": 7919,
"preview": "use crate::expr::Expr;\nuse crate::expr::FirstMatchOf;\nuse crate::expr::SequenceExpr;\nuse crate::{Token, TokenStringExt, "
},
{
"path": "harper-core/src/linting/an_a.rs",
"chars": 9946,
"preview": "use itertools::Itertools;\n\nuse crate::indefinite_article::{InitialSound, starts_with_vowel};\nuse crate::linting::{Lint, "
},
{
"path": "harper-core/src/linting/and_in.rs",
"chars": 2412,
"preview": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{Ex"
},
{
"path": "harper-core/src/linting/and_the_like.rs",
"chars": 5293,
"preview": "use crate::expr::{All, Expr, FixedPhrase, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\nuse crate::linting::{Ex"
},
{
"path": "harper-core/src/linting/another_thing_coming.rs",
"chars": 2779,
"preview": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n Token, TokenStringExt,\n expr::{Expr, SequenceExpr},\n lint"
},
{
"path": "harper-core/src/linting/another_think_coming.rs",
"chars": 2824,
"preview": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n Token, TokenStringExt,\n expr::{Expr, SequenceExpr},\n lint"
},
{
"path": "harper-core/src/linting/apart_from.rs",
"chars": 3623,
"preview": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::expr_linter::Chunk;\n\nuse super::{ExprLinter"
},
{
"path": "harper-core/src/linting/ask_no_preposition.rs",
"chars": 5300,
"preview": "use crate::expr::Expr;\nuse crate::expr::SequenceExpr;\nuse crate::linting::expr_linter::Chunk;\nuse crate::{\n Span, Tok"
},
{
"path": "harper-core/src/linting/avoid_curses.rs",
"chars": 9593,
"preview": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::{LintKind, Suggestion};\n\nuse super::{ExprLi"
},
{
"path": "harper-core/src/linting/back_in_the_day.rs",
"chars": 5542,
"preview": "use crate::expr::Expr;\nuse crate::expr::FixedPhrase;\nuse crate::expr::LongestMatchOf;\nuse crate::expr::OwnedExprExt;\nuse"
},
{
"path": "harper-core/src/linting/be_allowed.rs",
"chars": 4863,
"preview": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n Token,\n expr::{Expr, ExprMap, SequenceExpr},\n linting::{E"
},
{
"path": "harper-core/src/linting/be_worried.rs",
"chars": 7324,
"preview": "use crate::{\n CharStringExt, Token,\n expr::{All, Expr, OwnedExprExt, SequenceExpr},\n linting::{\n ExprLin"
},
{
"path": "harper-core/src/linting/behind_the_scenes.rs",
"chars": 2753,
"preview": "use crate::{\n Lint, Token,\n expr::{Expr, SequenceExpr},\n linting::{ExprLinter, LintKind, Suggestion, expr_linte"
},
{
"path": "harper-core/src/linting/best_of_all_time.rs",
"chars": 6005,
"preview": "use crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::{ExprLinter, Lint, LintKind, Suggestion, ex"
},
{
"path": "harper-core/src/linting/boring_words.rs",
"chars": 1577,
"preview": "use itertools::Itertools;\n\nuse crate::expr::{Expr, FirstMatchOf, WordExprGroup};\nuse crate::thesaurus_helper;\nuse crate:"
},
{
"path": "harper-core/src/linting/bought.rs",
"chars": 4314,
"preview": "use super::{ExprLinter, Lint, LintKind};\nuse crate::Token;\nuse crate::expr::{Expr, SequenceExpr};\nuse crate::linting::Su"
},
{
"path": "harper-core/src/linting/brand_brandish.rs",
"chars": 7476,
"preview": "use crate::{\n Lint, Token, TokenKind,\n expr::{Expr, SequenceExpr},\n linting::{ExprLinter, LintKind, Suggestion,"
},
{
"path": "harper-core/src/linting/by_accident.rs",
"chars": 4190,
"preview": "/*\nlet message \"Did you mean `by accident`?\"\nlet description \"Incorrect preposition: `by accident` is the idiomatic expr"
},
{
"path": "harper-core/src/linting/call_them.rs",
"chars": 10929,
"preview": "use std::{ops::Range, sync::Arc};\n\nuse crate::expr::{Expr, ExprMap, SequenceExpr};\nuse crate::patterns::DerivedFrom;\nuse"
},
{
"path": "harper-core/src/linting/cant.rs",
"chars": 3963,
"preview": "use super::{ExprLinter, Suggestion};\nuse crate::Lint;\nuse crate::expr::{Expr, LongestMatchOf, SequenceExpr};\nuse crate::"
},
{
"path": "harper-core/src/linting/capitalize_personal_pronouns.rs",
"chars": 4738,
"preview": "use crate::TokenStringExt;\n\nuse super::{Lint, LintKind, Linter, Suggestion};\n\n/// A linter that makes sure you capitaliz"
},
{
"path": "harper-core/src/linting/cautionary_tale.rs",
"chars": 4657,
"preview": "use crate::linting::expr_linter::Chunk;\nuse crate::{\n Token,\n expr::{Expr, SequenceExpr},\n linting::{ExprLinter"
}
]
// ... and 1134 more files (download for full content)
About this extraction
This page contains the full source code of the Automattic/harper GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1334 files (34.8 MB), approximately 3.0M tokens, and a symbol index with 8803 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.