Skip to content

Commit

Permalink
Capitalize all suggested fixes
Browse files Browse the repository at this point in the history
When a wrong word is capitalized, capitalize all the suggested fixes,
instead of only the first fix.
  • Loading branch information
DimitriPapadopoulos committed Jan 4, 2022
1 parent bdcf7a6 commit fd75e95
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
2 changes: 1 addition & 1 deletion codespell_lib/_codespell.py
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,7 @@ def is_text_file(filename):

def fix_case(word, fixword):
if word == word.capitalize():
return fixword.capitalize()
return ', '.join(w.strip().capitalize() for w in fixword.split(','))
elif word == word.upper():
return fixword.upper()
# they are both lower case
Expand Down
44 changes: 44 additions & 0 deletions codespell_lib/tests/test_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,50 @@ def test_case_handling(tmpdir, capsys):
assert f.read().decode('utf-8') == 'this has an ASCII error'


def test_case_handling_in_fixes(tmpdir, capsys):
"""Test that the case of fixes is similar to the mispelled word."""
d = str(tmpdir)
with open(op.join(d, 'dictionary_with_reason.txt'), 'w') as f:
fix = 'adopter, adaptor'
reason = 'these are different words!'
f.write(f'adoptor->{fix}, {reason}\n')
dictionary_name = f.name

# the mispelled word is entirely lowercase
with open(op.join(d, 'bad.txt'), 'w') as f:
f.write('early adoptor\n')
code, stdout, _ = cs.main('-D', dictionary_name, f.name, std=True)
# all suggested fixes must be lowercase too
assert 'adopter, adaptor' in stdout

# the mispelled word is capitalized
with open(op.join(d, 'bad.txt'), 'w') as f:
f.write('Early Adoptor\n')
code, stdout, _ = cs.main('-D', dictionary_name, f.name, std=True)
# all suggested fixes must be capitalized too
assert 'Adopter, Adaptor' in stdout
# the reason, however, must not be modified
assert reason in stdout

# the mispelled word is entirely uppercase
with open(op.join(d, 'bad.txt'), 'w') as f:
f.write('EARLY ADOPTOR\n')
code, stdout, _ = cs.main('-D', dictionary_name, f.name, std=True)
# all suggested fixes must be uppercase too
assert 'ADOPTER, ADAPTOR' in stdout
# the reason, however, must not be modified
assert reason in stdout

# the mispelled word mixes lowercase and uppercase
with open(op.join(d, 'bad.txt'), 'w') as f:
f.write('EaRlY AdOpToR\n')
code, stdout, _ = cs.main('-D', dictionary_name, f.name, std=True)
# all suggested fixes should be lowercase
assert 'adopter, adaptor' in stdout
# the reason, however, must not be modified
assert reason in stdout


def test_context(tmpdir, capsys):
"""Test context options."""
d = str(tmpdir)
Expand Down

0 comments on commit fd75e95

Please sign in to comment.