Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a lint rule for e-mail #23146

Merged
merged 2 commits into from
Feb 20, 2023
Merged

Add a lint rule for e-mail #23146

merged 2 commits into from
Feb 20, 2023

Conversation

OnkarRuikar
Copy link
Contributor

With this the linter will not allow e-mail.

@OnkarRuikar OnkarRuikar requested a review from a team as a code owner December 23, 2022 03:22
.markdownlint-cli2.jsonc Outdated Show resolved Hide resolved
@OnkarRuikar
Copy link
Contributor Author

I suggest making it a generic rule like "bad-spelling" so we don't have to add 7 lines to this file every time something gets banned.

Also, does cSpell have a "block-list" sort of feature?

@Josh-Cena the solution depends on how far we are going to go with spellings:
a. occasionally block some outdated words like e-mail, web site etc.
b. have full-blown list of correct words like Microsoft and Google docs and enforce them.
c. have dedicated spellchecker for everything and all words.

For option #a we can keep adding words like this PR does.

For option #b we implement dedicated replacement list rule in the linter:

{
	name: "bad-spellings"
    search: [ "e-mail", "web site", "time stamp"],
    replace: ["email", "website", "timestamp"]
}

For option #c we can use tools like cspell and spellchecker-cli.
The cspell does have forbid words feature.

> cspell --show-suggestions index.md

.../index.md:2:8 - Unknown word (heiallo) Suggestions: [hello, hallo, niello, heirloom, heimdall]
.../index.md:13:1 - Forbidden word (e-mail) Suggestions: [email, emails, entail, emil, camail]
CSpell: Files checked: 1, Issues found: 2 in 1 files

I think for the long-run we can use cSpell, as cspell will integrate well with VSCode as well because it's port of VSCode plugin "Code Spell Checker".

Ping @bsmth, @nschonni

@Josh-Cena
Copy link
Member

I know @nschonni is already running cSpell locally, and I also have a copy of his config for my own VS Code config, so if he's taking care of other incorrect spellings anyway, this should be handleable as well.

@bsmth
Copy link
Member

bsmth commented Dec 28, 2022

Thanks @OnkarRuikar. I agree with Josh that this is a lot of work per disallowed word and we should look at alternatives. Cspell might be a good avenue, I'm also using it in VSCode and adding words to a user config as I go, but it's still going to need some tweaks. If you run it over web/javascript/**/*.md with a config that already has some hand-picked additions:

cspell -c ~/mdncspell.json --unique --no-progress files/en-us/web/javascript/**/*.md
...
./web/javascript/reference/statements/do...while/index.md:19:47 - Unknown word (dowhile)
./web/javascript/reference/statements/export/index.md:270:57 - Unknown word (htmlelement)
./web/javascript/reference/statements/for-await...of/index.md:21:47 - Unknown word (forawaitof)
./web/javascript/reference/statements/for...in/index.md:16:47 - Unknown word (forin)
./web/javascript/reference/statements/for...of/index.md:19:47 - Unknown word (forof)
./web/javascript/reference/statements/function_star_/index.md:290:13 - Unknown word (Lindesay)
./web/javascript/reference/statements/import/index.md:229:3 - Unknown word (Limin)
./web/javascript/reference/statements/import/index.md:229:20 - Unknown word (Terlson)
./web/javascript/reference/statements/let/index.md:98:5 - Unknown word (Redeclarations)
./web/javascript/reference/statements/throw/index.md:134:7 - Unknown word (ZIPCODE)
./web/javascript/reference/statements/throw/index.md:158:17 - Unknown word (rethrown)
./web/javascript/reference/statements/try...catch/index.md:17:47 - Unknown word (trycatch)
./web/javascript/reference/statements/try...catch/index.md:100:3 - Unknown word (myroutine)
./web/javascript/reference/statements/var/index.md:23:5 - Unknown word (varname)
./web/javascript/reference/strict_mode/index.md:120:39 - Unknown word (Varible)
./web/javascript/reference/strict_mode/index.md:164:109 - Unknown word (undeletable)
./web/javascript/reference/template_literals/index.md:126:12 - Unknown word (collapser)
./web/javascript/reference/template_literals/index.md:331:72 - Unknown word (DSLs)

CSpell: Files checked: 904, Issues found: 1964 in 471 files

Approx 2000 unknown words under JS docs, so that rules out option a) at least for all types of typos (including uncommon words). I like the links you have pointed to for word lists, these would be useful to include in a spellchecker for common typos (style enforcement).

I think the markdownlint job should just check formatting and we can tackle spelling in a separate effort that's easier to maintain, what do you think?

@OnkarRuikar
Copy link
Contributor Author

OnkarRuikar commented Dec 28, 2022

From the conversation in #web-docs-content room, involving full fledged spellchecker for technical documentation like this doesn't look like a good idea.

Onkar: All, we recently corrected the e-mail word in the entire content repo.
Adding to that, can we implement a full-blown spell checker for mdn/content repo?
It'll work in local environment(VSCode and cli), husky, pr-checks, and nightly cron jobs.
For more info refer: #23146 (comment)

@Rumyra: IIRC When we moved to github a couple of years back we had someone run a spell checker over the entire repo and it was too much, changing the meaning of things, so we don't recommend it. However reading the thread I'm not opposed to option a or b 👍

@schalkneethling: Yeah, spell checkers that works well with technical documentation and code still has some way to go. I wonder if the latest things from OpenAI and HuggingFace might help here?

I agree with the argument because we'll have to add a lot of words to our custom allow list like: abortable, componentized, accentcolortext, appcache, redirectors, authorid, mergeable etc.
Source of new words could be:

  • variable names: e.g. msgtext. The spellcheckers do detect camelCase but our code is not completely camel cased.
  • lorem ipsum: Almost all the words in such text are invalid. 😱
  • convenience: e.g. abortable, mergeable.

Even if we add these to our ignore list and setup a spellchecker, we'll have to keep updating the list for new contributions or ask PR authors to correct them. I ran cspell on the entire repo today it flagged ~5779 spelling errors.

npx cspell --no-progress --words-only --unique "../mdn/content/**/*.md" | sort --ignore-case >>bad-words.txt

Middle way is to maintain a bad word list (like this) only for words which we don't want to promote e.g. e-mail, web site. I am working on option b. It'll add ability to specify arrays in the rule config in markdownlint-rule-search-replace package.


@bsmth

I think the markdownlint job should just check formatting and we can tackle spelling in a separate effort that's easier to maintain, what do you think?

Difference between handling it in linter vs spellchecker would be ability to auto fix. The linter will be able to autofix e-mail to email. Spellchecker won't be able to do that, it'll only flag the bad word.
If we don't suggest corrections then contributors will be forced to find replacements on their own.

If we want to to add a spellchecker then bigger discussion is needed. May be on https://github.com/mdn/mdn-community/discussions?

@OnkarRuikar
Copy link
Contributor Author

OnkarRuikar commented Dec 30, 2022

All, I've implemented and added a new generic rule for handling the incorrect spellings. Now the config will like this:

        {
          "name": "bad-spelling",
          "message": "Incorrect spelling",
          "searchPattern": ["/e-mail/ig", 
                            "/time stamp/ig", 
                            "/web site|web-site/ig"],

          "replace": ["email", "timestamp", "website"],
          "skipCode": false
        }

To add to above discussions, using linter we can ban split words like web site. Spell checkers will always see them as valid.

/cc @nschonni.

Copy link

@schalkneethling schalkneethling left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small suggestions that might not be possible. Thanks, @OnkarRuikar

.markdownlint-cli2.jsonc Outdated Show resolved Hide resolved
@bsmth
Copy link
Member

bsmth commented Jan 2, 2023

Thank @OnkarRuikar. I was initially thinking it should be "either or" with the markdownlint job versus a dedicated spellchecker, but maybe we could make use of both. It looks like checking in a cspell config at some point might be a good idea regardless of how it's enforced (I spotted you can include a lorem-ipsum dictionary, too, see this gist). Warnings via spellcheck on changed files in PRs combined with adding flagged words to the config as we go might help.

Difference between handling it in linter vs spellchecker would be ability to auto fix.

Yeah this is useful.

I think for the long-run we can use cSpell, as cspell will integrate well with VSCode as well

I agree with this. I think this PR is a useful change for the meantime 👍🏻

Some notes / things to look at alongside this PR or for a separate spellchecker discussion:

@OnkarRuikar
Copy link
Contributor Author

One more point to add to the discussion, what to do with incorrect spellings coming from external resources?
For example,

a. In URLs:
[Colour Manegement Guide](www.blogs.com/colour-manegement-guide)

b. Article titles:
For more info refer the article "Using CSS Property appearence" on www.abc.com.

c. In external code snippets:
Consider following code snippet taken from the example ( www.github.com/mdn/interactive-examples/abcd.html)
```js
let colar = 'green';
```

Should we correct it on our side? Or Do we add a setting/magic comment to ignore the spot?

Copy link
Contributor

@caugner caugner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Config change LGTM.

@OnkarRuikar OnkarRuikar force-pushed the patch-2 branch 2 times, most recently from 0968df1 to 9492f86 Compare February 8, 2023 01:13
@OnkarRuikar OnkarRuikar force-pushed the patch-2 branch 2 times, most recently from d3303b0 to bbe87e2 Compare February 12, 2023 23:48
@github-actions
Copy link
Contributor

Preview URLs (294 pages)
Flaws (88)

Note! 253 documents with no flaws that don't need to be listed. 🎉

URL: /en-US/docs/MDN/Writing_guidelines/Page_structures/Page_types/HTML_element_page_template
Title: HTML element page template
Flaw count: 1

  • bad_bcd_queries:
    • No BCD data for query: path.to.feature.NameOfTheElement

URL: /en-US/docs/MDN/Writing_guidelines/Page_structures/Page_types/API_method_subpage_template
Title: API method subpage template
Flaw count: 2

  • macros:
    • /en-us/docs/web/api/mdn (url: /en-US/docs/Web/API/MDN) does not exist
  • bad_bcd_queries:
    • No BCD data for query: path.to.feature.NameOfTheMethod

URL: /en-US/docs/MDN/Writing_guidelines/Page_structures/Page_types/HTTP_header_page_template
Title: HTTP header page template
Flaw count: 1

  • bad_bcd_queries:
    • No BCD data for query: path.to.feature.NameOfTheHeader

URL: /en-US/docs/MDN/Writing_guidelines/Page_structures/Page_types/API_constructor_subpage_template
Title: API constructor subpage template
Flaw count: 3

  • macros:
    • /en-us/docs/web/api/mdn (url: /en-US/docs/Web/API/MDN) does not exist
    • /en-US/docs/Web/API/NameOfTheParentInterface does not exist
  • bad_bcd_queries:
    • No BCD data for query: path.to.feature.NameOfTheConstructor

URL: /en-US/docs/MDN/Writing_guidelines/Page_structures/Page_types/API_event_subpage_template
Title: API event subpage template
Flaw count: 3

  • macros:
    • /en-us/docs/web/api/mdn (url: /en-US/docs/Web/API/MDN) does not exist
  • broken_links:
    • Can't resolve /en-US/docs/Web/API/Window/animationcancel_event
  • bad_bcd_queries:
    • No BCD data for query: path.to.feature.NameOfTheEvent_event

URL: /en-US/docs/MDN/Writing_guidelines/Page_structures/Page_types/API_landing_page_template
Title: API landing page template
Flaw count: 10

  • macros:
    • /en-us/docs/web/api/mdn (url: /en-US/docs/Web/API/MDN) does not exist
    • /en-US/docs/Web/API/NameOfTheInterface does not exist
    • /en-US/docs/Web/API/Addition1 does not exist
    • /en-US/docs/Web/API/Addition1 does not exist
    • Calling the Specifications macro with any arguments is deprecated; instead use either the 'browser-compat' or 'spec-urls' front-matter key.
    • and 3 more flaws omitted
  • bad_bcd_queries:
    • No BCD data for query: path.to.feature.Interface_1
    • No BCD data for query: path.to.feature.Interface_2

URL: /en-US/docs/MDN/Writing_guidelines/Page_structures/Page_types/API_reference_page_template
Title: API reference page template
Flaw count: 16

  • macros:
    • /en-us/docs/web/api/mdn (url: /en-US/docs/Web/API/MDN) does not exist
    • /en-US/docs/Web/API/NameOfTheInterface/NameOfTheInterface does not exist
    • /en-US/docs/Web/API/NameOfTheInterface does not exist
    • /en-US/docs/Web/API/NameOfParentInterface does not exist
    • /en-US/docs/Web/API/NameOfTheInterface/staticProperty1 does not exist
    • and 10 more flaws omitted
  • bad_bcd_queries:
    • No BCD data for query: path.to.feature.NameOfTheInterface

URL: /en-US/docs/MDN/Writing_guidelines/Page_structures/Page_types/API_property_subpage_template
Title: API property subpage template
Flaw count: 2

  • macros:
    • /en-us/docs/web/api/mdn (url: /en-US/docs/Web/API/MDN) does not exist
  • bad_bcd_queries:
    • No BCD data for query: path.to.feature.NameOfTheProperty

URL: /en-US/docs/MDN/Writing_guidelines/Page_structures/Page_types/CSS_selector_page_template
Title: CSS selector page template
Flaw count: 1

  • bad_bcd_queries:
    • No BCD data for query: css.selectors.NameOfTheSelector

URL: /en-US/docs/Learn/Accessibility/WAI-ARIA_basics
Title: WAI-ARIA basics
Flaw count: 3

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/Using_Github_pages
    • Can't resolve /en-US/docs/Web/Accessibility/ARIA/Roles/
    • Can't resolve /en-US/docs/Web/Accessibility/ARIA/Attributes/

URL: /en-US/docs/Learn/Performance/Perceived_performance
Title: Perceived performance
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Glossary/first_meaningful_paint

URL: /en-US/docs/Learn/Performance/JavaScript
Title: JavaScript performance
Flaw count: 2

  • broken_links:
    • Can't resolve /en-US/docs/Glossary/minification
    • Can't resolve /en-US/docs/Glossary/brotli_compression

URL: /en-US/docs/Learn/Forms/Form_validation
Title: Client-side form validation
Flaw count: 2

  • macros:
    • /en-US/docs/Web/API/ValidityState/customError does not exist
  • broken_links:
    • Can't resolve /en-US/docs/Web/Guide/HTML/Constraint_validation#validation-related_attributes

URL: /en-US/docs/Learn/Forms/How_to_structure_a_web_form
Title: How to structure a web form
Flaw count: 2

  • macros:
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements
    • /en-US/docs/Web/HTML/Element/h2 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements

URL: /en-US/docs/Learn/Forms/Sending_and_retrieving_form_data
Title: Sending form data
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/What_is_a_URL

URL: /en-US/docs/Learn/Forms/UI_pseudo-classes
Title: UI pseudo-classes
Flaw count: 2

  • broken_links:
    • Can't resolve /en-US/docs/Web/Guide/HTML/Constraint_validation
    • Can't resolve /en-US/docs/Web/HTML/Attributes/placeholder

URL: /en-US/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance
Title: Cascade, specificity, and inheritance
Flaw count: 2

  • broken_links:
    • Can't resolve /en-US/docs/Web/CSS/Inheritance
    • Can't resolve /en-US/docs/Learn/CSS/Building_blocks//selectors/combinators

URL: /en-US/docs/Learn/CSS/Building_blocks/Debugging_CSS
Title: Debugging CSS
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/What_are_browser_developer_tools

URL: /en-US/docs/Learn/CSS/Building_blocks/The_box_model
Title: The box model
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/What_are_browser_developer_tools

URL: /en-US/docs/Learn/CSS/Building_blocks/Creating_fancy_letterheaded_paper
Title: Creating fancy letterheaded paper
Flaw count: 1

  • macros:
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements

URL: /en-US/docs/Learn/CSS/Building_blocks/Handling_different_text_directions
Title: Handling different text directions
Flaw count: 1

  • macros:
    • /en-US/docs/Web/HTML/Element/h2 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements

URL: /en-US/docs/Learn/CSS/First_steps/What_is_CSS
Title: What is CSS?
Flaw count: 2

  • macros:
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements

URL: /en-US/docs/Learn/CSS/CSS_layout/Positioning
Title: Positioning
Flaw count: 1

  • macros:
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements

URL: /en-US/docs/Learn/CSS/CSS_layout/Legacy_Layout_Methods
Title: Legacy layout methods
Flaw count: 1

  • macros:
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements

URL: /en-US/docs/Learn/CSS/Styling_text/Styling_lists
Title: Styling lists
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/What_are_browser_developer_tools

URL: /en-US/docs/Learn/CSS/Styling_text/Fundamentals
Title: Fundamental text and font styling
Flaw count: 3

  • macros:
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements

URL: /en-US/docs/Learn/Server-side/First_steps/Client-Server_overview
Title: Client-Server Overview
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/What_is_a_web_server

URL: /en-US/docs/Learn/Server-side/First_steps/Introduction
Title: Introduction to the server side
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/What_is_a_web_server

URL: /en-US/docs/Learn/Server-side/First_steps/Website_security
Title: Website security
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Glossary/https

URL: /en-US/docs/Learn/Server-side/Django/development_environment
Title: Setting up a Django development environment
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/Available_text_editors

URL: /en-US/docs/Learn/Server-side/Express_Nodejs/development_environment
Title: Setting up a Node development environment
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/Available_text_editors

URL: /en-US/docs/Learn/Getting_started_with_the_web/Publishing_your_website
Title: Publishing your website
Flaw count: 7

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/What_is_a_web_server
    • Can't resolve /en-US/docs/Learn/Common_questions/What_is_a_domain_name
    • Can't resolve /en-US/docs/Learn/Common_questions/How_much_does_it_cost#software
    • Can't resolve /en-US/docs/Learn/Common_questions/How_do_you_host_your_website_on_Google_App_Engine
    • Can't resolve /en-US/docs/Learn/Common_questions/What_is_a_web_server
    • and 2 more flaws omitted

URL: /en-US/docs/Learn/Getting_started_with_the_web/How_the_Web_works
Title: How the web works
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/How_does_the_Internet_work

URL: /en-US/docs/Learn/Getting_started_with_the_web/CSS_basics
Title: CSS basics
Flaw count: 2

  • macros:
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements

URL: /en-US/docs/Learn/Getting_started_with_the_web/Installing_basic_software
Title: Installing basic software
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/set_up_a_local_testing_server

URL: /en-US/docs/Learn/Getting_started_with_the_web/JavaScript_basics
Title: JavaScript basics
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Learn/Common_questions/What_are_browser_developer_tools

URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_interactivity_events_state
Title: Ember interactivity: Events, classes and state
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Web/API/Document/keydown_event

URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/HTML_and_CSS
Title: Handling common HTML and CSS problems
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Web/CSS/color_value/rgba

URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Accessibility
Title: Handling common accessibility problems
Flaw count: 1

  • macros:
    • /en-US/docs/Web/HTML/Element/h1 redirects to /en-US/docs/Web/HTML/Element/Heading_Elements

URL: /en-US/docs/Learn/JavaScript/Building_blocks/Return_values
Title: Function return values
Flaw count: 1

  • broken_links:
    • Can't resolve /en-US/docs/Glossary/undefined

URL: /en-US/docs/Learn/JavaScript/Building_blocks/Events
Title: Introduction to events
Flaw count: 1

  • broken_links:
    • Anchor not lowercase
External URLs (1441)

URL: /en-US/docs/Learn/Accessibility/Multimedia
Title: Accessible multimedia


URL: /en-US/docs/Learn/Accessibility/What_is_accessibility
Title: What is accessibility?


URL: /en-US/docs/Learn/Accessibility/CSS_and_JavaScript
Title: CSS and JavaScript accessibility best practices


URL: /en-US/docs/Learn/Accessibility/Accessibility_troubleshooting
Title: Assessment: Accessibility troubleshooting


URL: /en-US/docs/Learn/Accessibility/HTML
Title: HTML: A good basis for accessibility


URL: /en-US/docs/Learn/Accessibility/WAI-ARIA_basics
Title: WAI-ARIA basics


URL: /en-US/docs/Learn/Accessibility/Mobile
Title: Mobile accessibility


URL: /en-US/docs/Learn/Performance/Measuring_performance
Title: Measuring performance


URL: /en-US/docs/Learn/Performance/Web_Performance_Basics
Title: Web performance resources


URL: /en-US/docs/Learn/Performance/video
Title: Multimedia: video


URL: /en-US/docs/Learn/Performance/why_web_performance
Title: The "why" of web performance


URL: /en-US/docs/Learn/Performance/HTML
Title: HTML performance features


URL: /en-US/docs/Learn/Performance/Perceived_performance
Title: Perceived performance


URL: /en-US/docs/Learn/Forms/Your_first_form
Title: Your first form


URL: /en-US/docs/Learn/Forms/Styling_web_forms
Title: Styling web forms


URL: /en-US/docs/Learn/Forms/Form_validation
Title: Client-side form validation


URL: /en-US/docs/Learn/Forms/Advanced_form_styling
Title: Advanced form styling


URL: /en-US/docs/Learn/Forms/Basic_native_form_controls
Title: Basic native form controls


URL: /en-US/docs/Learn/Forms/How_to_structure_a_web_form
Title: How to structure a web form


URL: /en-US/docs/Learn/Forms/Other_form_controls
Title: Other form controls


URL: /en-US/docs/Learn/Forms/HTML5_input_types
Title: The HTML5 input types


URL: /en-US/docs/Learn/Forms/Sending_and_retrieving_form_data
Title: Sending form data


URL: /en-US/docs/Learn/Forms/UI_pseudo-classes
Title: UI pseudo-classes


URL: /en-US/docs/Learn/CSS/Building_blocks/Images_media_form_elements
Title: Images, media, and form elements


URL: /en-US/docs/Learn/CSS/Building_blocks/Debugging_CSS
Title: Debugging CSS


URL: /en-US/docs/Learn/CSS/Building_blocks/Values_and_units
Title: CSS values and units


URL: /en-US/docs/Learn/CSS/Building_blocks/A_cool_looking_box
Title: A cool-looking box


URL: /en-US/docs/Learn/CSS/Building_blocks/Fundamental_CSS_comprehension
Title: Fundamental CSS comprehension


URL: /en-US/docs/Learn/CSS/Building_blocks/Backgrounds_and_borders
Title: Backgrounds and borders


URL: /en-US/docs/Learn/CSS/Building_blocks/Selectors/Pseudo-classes_and_pseudo-elements
Title: Pseudo-classes and pseudo-elements


URL: /en-US/docs/Learn/CSS/Building_blocks/Creating_fancy_letterheaded_paper
Title: Creating fancy letterheaded paper


URL: /en-US/docs/Learn/CSS/Building_blocks/Sizing_items_in_CSS
Title: Sizing items in CSS


URL: /en-US/docs/Learn/CSS/Building_blocks/Organizing
Title: Organizing your CSS


URL: /en-US/docs/Learn/CSS/Building_blocks/Styling_tables
Title: Styling tables


URL: /en-US/docs/Learn/CSS/First_steps/Styling_a_biography_page
Title: Styling a biography page


URL: /en-US/docs/Learn/CSS/First_steps/What_is_CSS
Title: What is CSS?


URL: /en-US/docs/Learn/CSS/CSS_layout/Fundamental_Layout_Comprehension
Title: Fundamental layout comprehension


URL: /en-US/docs/Learn/CSS/CSS_layout/Media_queries
Title: Beginner's guide to media queries


URL: /en-US/docs/Learn/CSS/CSS_layout/Floats
Title: Floats


URL: /en-US/docs/Learn/CSS/CSS_layout/Supporting_Older_Browsers
Title: Supporting older browsers


URL: /en-US/docs/Learn/CSS/CSS_layout/Practical_positioning_examples
Title: Practical positioning examples


URL: /en-US/docs/Learn/CSS/CSS_layout/Introduction
Title: Introduction to CSS layout


URL: /en-US/docs/Learn/CSS/CSS_layout/Grids
Title: Grids


URL: /en-US/docs/Learn/CSS/CSS_layout/Flexbox
Title: Flexbox


URL: /en-US/docs/Learn/CSS/CSS_layout/Positioning
Title: Positioning


URL: /en-US/docs/Learn/CSS/CSS_layout/Responsive_Design
Title: Responsive design


URL: /en-US/docs/Learn/CSS/CSS_layout/Legacy_Layout_Methods
Title: Legacy layout methods


URL: /en-US/docs/Learn/CSS/Styling_text/Web_fonts
Title: Web fonts


URL: /en-US/docs/Learn/CSS/Styling_text/Styling_lists
Title: Styling lists


URL: /en-US/docs/Learn/CSS/Styling_text/Typesetting_a_homepage
Title: Typesetting a community school homepage


URL: /en-US/docs/Learn/CSS/Styling_text/Styling_links
Title: Styling links


URL: /en-US/docs/Learn/CSS/Styling_text/Fundamentals
Title: Fundamental text and font styling


URL: /en-US/docs/Learn/Server-side/First_steps/Client-Server_overview
Title: Client-Server Overview


URL: /en-US/docs/Learn/Server-side/First_steps/Web_frameworks
Title: Server-side web frameworks


URL: /en-US/docs/Learn/Server-side/First_steps/Introduction
Title: Introduction to the server side


URL: /en-US/docs/Learn/Server-side/First_steps/Website_security
Title: Website security


URL: /en-US/docs/Learn/Server-side/Django/skeleton_website
Title: Django Tutorial Part 2: Creating a skeleton website


URL: /en-US/docs/Learn/Server-side/Django/Admin_site
Title: Django Tutorial Part 4: Django admin site


URL: /en-US/docs/Learn/Server-side/Django/Sessions
Title: Django Tutorial Part 7: Sessions framework


URL: /en-US/docs/Learn/Server-side/Django/development_environment
Title: Setting up a Django development environment


URL: /en-US/docs/Learn/Server-side/Django/Deployment
Title: Django Tutorial Part 11: Deploying Django to production


URL: /en-US/docs/Learn/Server-side/Django/web_application_security
Title: Django web application security


URL: /en-US/docs/Learn/Server-side/Django/django_assessment_blog
Title: Assessment: DIY Django mini blog


URL: /en-US/docs/Learn/Server-side/Django/Introduction
Title: Django introduction


URL: /en-US/docs/Learn/Server-side/Django/Testing
Title: Django Tutorial Part 10: Testing a Django web application


URL: /en-US/docs/Learn/Server-side/Django/Home_page
Title: Django Tutorial Part 5: Creating our home page


URL: /en-US/docs/Learn/Server-side/Django/Generic_views
Title: Django Tutorial Part 6: Generic list and detail views


URL: /en-US/docs/Learn/Server-side/Django/Models
Title: Django Tutorial Part 3: Using models


URL: /en-US/docs/Learn/Server-side/Express_Nodejs/skeleton_website
Title: Express Tutorial Part 2: Creating a skeleton website


URL: /en-US/docs/Learn/Server-side/Express_Nodejs/development_environment
Title: Setting up a Node development environment


URL: /en-US/docs/Learn/Server-side/Express_Nodejs/mongoose
Title: Express Tutorial Part 3: Using a Database (with Mongoose)


URL: /en-US/docs/Learn/Server-side/Express_Nodejs/deployment
Title: Express Tutorial Part 7: Deploying to production


URL: /en-US/docs/Learn/Server-side/Express_Nodejs/Displaying_data
Title: Express Tutorial Part 5: Displaying library data


URL: /en-US/docs/Learn/Server-side/Express_Nodejs/forms
Title: Express Tutorial Part 6: Working with forms


URL: /en-US/docs/Learn/Server-side/Express_Nodejs/Introduction
Title: Express/Node introduction


URL: /en-US/docs/Learn/Server-side/Express_Nodejs/routes
Title: Express Tutorial Part 4: Routes and controllers


URL: /en-US/docs/Learn/Getting_started_with_the_web/Publishing_your_website
Title: Publishing your website


URL: /en-US/docs/Learn/Getting_started_with_the_web/How_the_Web_works
Title: How the web works


URL: /en-US/docs/Learn/Getting_started_with_the_web/CSS_basics
Title: CSS basics


URL: /en-US/docs/Learn/Getting_started_with_the_web/Installing_basic_software
Title: Installing basic software


URL: /en-US/docs/Learn/Getting_started_with_the_web/JavaScript_basics
Title: JavaScript basics


URL: /en-US/docs/Learn/Getting_started_with_the_web/HTML_basics
Title: HTML basics


URL: /en-US/docs/Learn/Getting_started_with_the_web/What_will_your_website_look_like
Title: What will your website look like?


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_deployment_next
Title: Deployment and next steps


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_resources
Title: Vue resources


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_resources
Title: React resources


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_interactivity_events_state
Title: React interactivity: Events and state


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_item_component
Title: Creating an item component


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_getting_started
Title: Getting started with Svelte


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_routing
Title: Routing in Ember


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_refs_focus_management
Title: Focus management with Vue refs


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_conditional_footer
Title: Ember Interactivity: Footer functionality, conditional rendering


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_variables_props
Title: Dynamic behavior in Svelte: working with variables and props


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Main_features
Title: Framework main features


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_getting_started
Title: Getting started with Ember


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Introduction
Title: Introduction to client-side frameworks


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_getting_started
Title: Getting started with Angular


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_Todo_list_beginning
Title: Starting our Svelte to-do list app


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started
Title: Getting started with Vue


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_computed_properties
Title: Using Vue computed properties


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_resources
Title: Ember resources and troubleshooting


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_structure_componentization
Title: Ember app structure and componentization


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_interactivity_events_state
Title: Ember interactivity: Events, classes and state


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_TypeScript
Title: TypeScript support in Svelte


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_reactivity_lifecycle_accessibility
Title: Advanced Svelte: Reactivity, lifecycle, accessibility


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_rendering_lists
Title: Rendering a list of Vue components


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_first_component
Title: Creating our first Vue component


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_components
Title: Componentizing our Svelte app


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_methods_events_models
Title: Adding a new todo form: Vue events, methods, and models


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_building
Title: Building Angular applications and further resources


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_stores
Title: Working with Svelte stores


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_todo_list_beginning
Title: Beginning our React todo list


URL: /en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_conditional_rendering
Title: Vue conditional rendering: editing existing todos


URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Feature_detection
Title: Implementing feature detection


URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/HTML_and_CSS
Title: Handling common HTML and CSS problems


URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Accessibility
Title: Handling common accessibility problems


URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Introduction
Title: Introduction to cross-browser testing


URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Automated_testing
Title: Introduction to automated testing


URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Testing_strategies
Title: Strategies for carrying out testing


URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Your_own_automation_environment
Title: Setting up your own test automation environment


URL: /en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/JavaScript
Title: Handling common JavaScript problems


URL: /en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Deployment
Title: Deploying our app


URL: /en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Package_management
Title: Package management basics


URL: /en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Overview
Title: Client-side tooling overview


URL: /en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Introducing_complete_toolchain
Title: Introducing a complete toolchain


URL: /en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line
Title: Command line crash course


URL: /en-US/docs/Learn/JavaScript/Building_blocks/Return_values
Title: Function return values


URL: /en-US/docs/Learn/JavaScript/Building_blocks/Events
Title: Introduction to events


URL: /en-US/docs/Glossary/Cross-site_scripting
Title: Cross-site scripting (XSS)


URL: /en-US/docs/Glossary/Exception
Title: Exception


URL: /en-US/docs/Glossary/DOM
Title: DOM (Document Object Model)


URL: /en-US/docs/Glossary/Hyperlink
Title: Hyperlink


URL: /en-US/docs/Glossary/TCP
Title: TCP

@OnkarRuikar
Copy link
Contributor Author

Preview URLs (294 pages)

@yin1999 and @caugner Looks like there is a bug in preview companion. Only one file was modified but it generated preview for 294 files.

@bsmth bsmth merged commit e4e5a6f into mdn:main Feb 20, 2023
@OnkarRuikar OnkarRuikar deleted the patch-2 branch February 20, 2023 09:56
@yin1999
Copy link
Member

yin1999 commented Feb 20, 2023

Preview URLs (294 pages)

@yin1999 and @caugner Looks like there is a bug in preview companion. Only one file was modified but it generated preview for 294 files.

It looks like the head and base hash is not right in this PR, comparing between github API and the github workflow run.

@OnkarRuikar
Copy link
Contributor Author

OnkarRuikar commented Feb 20, 2023

It looks like the head and base hash is not right in this PR, comparing between github API and the github workflow run

Seems like GitHub picked up the detached commit ca3b60c as base for rebase, then workflow started working on it then then GitHub course corrected itself. Will putting some delay in workflow before fetching changed files solve the issue? It'll be hard to reproduce and test though. :(

hamishwillee pushed a commit that referenced this pull request Feb 20, 2023
* Add a generic bad-spelling rule

* Apply suggestions from code review

Co-authored-by: Schalk Neethling <[email protected]>

---------

Co-authored-by: Schalk Neethling <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants