TheOdinProject / curriculum

The open curriculum for learning web development
https://www.theodinproject.com/
Other
9.81k stars 13.17k forks source link

Suggestion: Codespell #12979

Closed Grae-Drake closed 3 years ago

Grae-Drake commented 4 years ago

Per @leila-alderman's suggestion, I'm opening an issue to recommend Codespell as a tool to help combat misspellings in the curriculum source.

Codespell is a Python-based command line tool that uses a dictionary of common misspellings to flag potential spelling issues. You can see an example of items flagged by Codespell in the PR linked above where I ran it against the curriculum repo and suggested 62 changes based on them. I've used Codespell in the past for markdown-based coding education content and generally been pretty happy with it. Without configuration it will give you plenty of false positives, but even with those the signal-to-noise ratio is pretty good. I've never actually tried to configure it enough to, for example, work it into CI/CD but that's certainly a possibility for the extremely automation-minded. What I'd have liked to do, but never had the resources to try, is set it up to automatically report (not fix) on revisions as they go through CI/CD.

Happy to share more about my experience here if useful.

I3uckwheat commented 4 years ago

@mindovermiles262 Can you take a look to see what this would take to add to the CI/CD?

mindovermiles262 commented 4 years ago

The curriculum repo does not currently have any CICD.

I will look into adding this codespell as a GH Action.

mindovermiles262 commented 4 years ago

Seems do-able with the correct settings. Issues will come from student's names:

$ codespell --skip="*.csv,./.git/*,./archive/*,*.png" -q 4

./web_development_101/javascript_basics/project_etch_a_sketch.md:72: Brower  ==> Browser
./web_development_101/javascript_basics/project_etch_a_sketch.md:185: Brower  ==> Browser
./web_development_101/javascript_basics/project_etch_a_sketch.md:187: Brower  ==> Browser
./web_development_101/javascript_basics/project_etch_a_sketch.md:188: Brower  ==> Browser
./web_development_101/javascript_basics/project_etch_a_sketch.md:842: Dameon  ==> Daemon, demon, damien
./web_development_101/javascript_basics/project_etch_a_sketch.md:899: Wil  ==> Will, well
./web_development_101/javascript_basics/project_rock_paper_scissors.md:54: Chang  ==> Change
./web_development_101/javascript_basics/project_rock_paper_scissors.md:1358: Dameon  ==> Daemon, demon, damien
./web_development_101/javascript_basics/project_rock_paper_scissors.md:1447: Wil  ==> Will, well
./web_development_101/javascript_basics/fundamentals-4.md:36: leapYears  ==> leap years
./web_development_101/javascript_basics/project_calculator.md:124: Broser  ==> Browser
./web_development_101/javascript_basics/project_calculator.md:360: Bridget  ==> Bridged
./web_development_101/the_front_end/project_html_css.md:710: Ege  ==> Edge
./web_development_101/the_front_end/project_html_css.md:1911: Bridget  ==> Bridged
./web_development_101/the_front_end/project_html_css.md:2206: Hart  ==> Heart, harm
./web_development_101/the_front_end/project_html_css.md:2470: Wen  ==> We, when
./web_development_101/the_front_end/project_html_css.md:2471: Wen  ==> We, when
./web_development_101/the_front_end/project_html_css.md:2991: Dameon  ==> Daemon, demon, damien
./web_development_101/archive/javascript_basics.md:298: Alo  ==> Also
./web_development_101/archive/project_js_jquery.md:392: Alo  ==> Also
./web_development_101/archive/JS101/JS_resources.md:10: higly  ==> highly
./web_development_101/archive/JS101/oldFundamentalsLessons/fundamentals-2-project.md:23: leapYears  ==> leap years
./web_development_101/archive/JS101/oldFundamentalsLessons/fundamentals-1.md:104: Od  ==> Of
./nodeJS/APIs/APIs.md:15: seperating  ==> separating
./html_css/links.md:24: od  ==> of
./html_css/new_html5.md:23: od  ==> of
./rails_programming/apis_mailers_advanced_topics/api_interfacing.md:128: intergrating  ==> integrating
./rails_programming/forms_and_authentication/project_forms.md:217: Bridget  ==> Bridged
./rails_programming/rails_basics/project_blog_app.md:376: Upto  ==> Up to
./rails_programming/rails_basics/project_blog_app.md:387: Bridget  ==> Bridged
./rails_programming/old_lessons/introduction_to_rails/project_feet_wet.md:145: Bridget  ==> Bridged
./python/OUTLINE.md:23: Concatination  ==> Concatenation
./python/drafts/python-types.md:43: hight  ==> height, high
./javascript/frameworks/angular.md:54: whats  ==> what's
./javascript/frameworks/angular.md:55: framwework  ==> framework
./ruby_programming/intermediate_ruby/project_event_manager.md:738: recieve  ==> receive
./ruby_programming/basic_ruby_projects/sub_strings.md:215: subtrings  ==> substrings
./ruby_programming/basic_ruby_projects/caesar_cipher.md:233: ceasar  ==> caesar
./ruby_programming/basic_ruby_projects/caesar_cipher.md:421: ceasar  ==> caesar
./ruby_programming/basic_ruby/loops.md:132: Upto  ==> Up to
./ruby_programming/basic_ruby/loops.md:137: upto  ==> up to
./ruby_programming/basic_ruby/problem_solving.md:122: upto  ==> up to
./ruby_programming/basic_ruby/problem_solving.md:149: upto  ==> up to
./ruby_programming/basic_ruby/problem_solving.md:182: upto  ==> up to
./ruby_programming/basic_ruby/problem_solving.md:215: upto  ==> up to
./ruby_programming/archive/basic_ruby/project_building_blocks.md:235: ceasar  ==> caesar
./ruby_programming/archive/basic_ruby/project_building_blocks.md:423: ceasar  ==> caesar
./ruby_programming/archive/basic_ruby/project_building_blocks.md:1217: subtrings  ==> substrings
./ruby_programming/archive/basic_ruby/ruby_project.md:523: Bridget  ==> Bridged
CouchofTomato commented 3 years ago

@mindovermiles262

Hey mate. Is this still of interest for keeping alive?

As student submissions have now been moved out this may be more realistic to set up in github actions. Are you still interested in taking it on?

I3uckwheat commented 3 years ago

@mindovermiles262 With the new submissions feature, I think we can easily implement this and not worry about student's names.