Skip to content

Latest commit

 

History

History
145 lines (111 loc) · 6.45 KB

File metadata and controls

145 lines (111 loc) · 6.45 KB

Spell Checking the Azure SDK

Note

If you are working on an Azure REST API spec see SpellCheck instructions here: https://aka.ms/ci-fix#spell-check

Spell checking (cspell) is used in CI and possibly locally to help maintain high quality customer-facing code and assets.

Spell Check Locally

Install the Code Spell Checker vscode extension locally. It will automatically spell check code according to configuration in the cspell.json file in the .vscode folder in the repo

The cspell tool can also be run on the command line according to instructions for cspell.

Spell Check in CI

We use cspell in the CI environment to check for spelling errors. We use the cspell.json file in .vscode to configure the scan.

CI checks only files which are changed. If some files are excluded in the cspell.json config those files will not be scanned even if they are changed. All spelling errors in a changed file will be reported, not just portions of the file that were changed for a particular PR.

This behavior can be replicated locally by running from the root of the repo:

./eng/common/scripts/check-spelling-in-changed-files.ps1

The EngSys team generally tries to use up-to-date versions of cspell in CI. Dictionaries and spell checking logic may change over time so CI results will vary over time.

Fixing spelling errors

Look for spelling errors in the CI logs for your PR. Fix spelling errors that should be fixed, see False positives for instructions on how to suppress false positives.

Example CI Output

Look for "Unknown word" in the spell check run log to find spelling errors

...
232/372 ./sdk/storage/storage-file-datalake/src/models.internal.ts 12.98ms
233/372 ./sdk/storage/storage-file-datalake/src/policies -
234/372 ./sdk/storage/storage-file-datalake/src/sas -
235/372 ./sdk/storage/storage-file-datalake/src/transforms.ts 82.74ms
236/372 ./sdk/storage/storage-file-datalake/src/utils -
237/372 ./sdk/storage/storage-file-datalake/src/utils/cache.ts 17.26ms
238/372 ./sdk/storage/storage-file-datalake/src/utils/tracing.ts 23.29ms
239/372 ./sdk/storage/storage-file-datalake/src/utils/utils.browser.ts 28.80ms
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:8:37 - Unknown word (Helvetica)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:8:47 - Unknown word (Neue)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:8:54 - Unknown word (Helvetica)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:98:14 - Unknown word (tbody)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:101:19 - Unknown word (vsts)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:108:19 - Unknown word (vsts)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:117:179 - Unknown word (noopener)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:117:188 - Unknown word (noreferrer)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:126:168 - Unknown word (noopener)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:126:177 - Unknown word (noreferrer)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:135:166 - Unknown word (noopener)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:135:175 - Unknown word (noreferrer)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:144:166 - Unknown word (noopener)
/home/vsts/work/1/s/sdk/storage/storage-file-datalake/storage-file-datalake-lintReport.html:144:175 - Unknown word (noreferrer)
...

False positives

If you receive a spelling failure, first try to fix the spelling in source.

If there are new words that need to be supported for your service, add the word to the override list in the words list in the sdk/<service>/cspell.yaml file for your service. Specific files can also be overridden using the override field in your service's cspell.yaml file (see example below).

If the sdk/<service>/cspell.yaml file does not exist, create it using the example below and set the words and overrides fields to the words that need to be suppressed. The import field is required.

For example (note the words list is sorted alphabetically):

import:
  - ../../.vscode/cspell.json
words:
  - aardvark
  - zoology

# Optional overrides example for words in a specific file
overrides:
  - filename: '**/sdk/contosowidgetmanager/somefile.yaml'
    words:
      - aardwolf
      - zoo

Spell checking is generally case-insensitive so you only need to add a word once in lower-case. Try to keep the word list sorted for easier discovery.

Migrating from .vscode/cspell.json to sdk/<service>/cspell.yaml

Note

In the past, editing .vscode/cspell.json was the way to add words to spellcheck configuration. Going forward, each service should use its own cspell.yaml file to maintain a list of words specific to that service. This reduces merge conflicts in the .vscode/cspell.json file and is easier to read.

If you are adding words for your service, look in .vscode/cspell.json for paths that include your service directory and migrate them into your service-specific cspell.yaml file. Remove the entries from .vscode/cspell.json after migrating them. You may need to use git add -f .vscode/cspell.json to add changes.

Contributors

We sometimes credit external contributors in our CHANGELOG.md files. In these cases add the user's alias directly to an override for CHANGELOG.md files. The CHANGELOG files are mostly prose and highly visible to customers, it makes sense to spell check the rest of the file and not ignore it.

import:
  - ../../.vscode/cspell.json

overrides:
  - filename: '**/sdk/core/Azure.Core/CHANGELOG.md'
    words:
      - <external-contributor-alias>

More information

For more information see cspell configuration.