don't worry, it's probably fine

Linting my prose with Vale

16 Nov 2019

nablopomo blogging

My team has been working closely with the technical writing community this quarter. Vale is a highly-extensible linter that I learned about from one of the technical writers embedded in our team.

I’m always interested in improving my writing so a piece of tooling that can point out inconsistencies in tone rather than just spelling sounded intriguing!

This post forms half “how to get started with Vale” and half “building my own style”

Installing Vale

At time of writing, Vale is not installable through Homebrew. I downloaded a release from their page, installed it to /usr/local/bin, ran it and …

$ vale
WARNING: Missing or invalid config file.

See for information about creating a config file.

Oh, I guess I need a configuration file first.

I made a very minimal configuration by munging the example from the Vale wiki - it belongs in a file called .vale.ini in the root of my blog project.

StylesPath = vale-styles/
MinAlertLevel = error

BasedOnStyles = write-good
vale.Editorializing = YES
vale.Hedging = error

This will work, right?

$ vale _posts/* --debug
✔ 0 errors, 0 warnings and 0 suggestions in 86 files.

I guess I need to load some styles!

Configuring styles

Vale is very extensible - I decided to start off with something simple. A lot of content guides warn about the horrors of Passive Voice so I “borrowed” some publicly available configuration from the govuk-developer-docs

I copied this to vale-styles/Tone/PassiveVoice.yml and added Tone to the configuration under BasedOnStyles.

$ vale _posts/*
✖ 0 errors, 270 warnings and 0 suggestions in 86 files.

Wow, that’s a lot of passive voice. I have a bit of editing to do in the near future. I’m going to pretend I haven’t loaded this style, and create one of my own instead.

Creating custom styles

I find myself wanting to be consistent in my technical vocabulary. Should kubernetes always be capitalised? Have I defined any acronyms I use heavily, like Test-Driven Development being shortened to TDD?

Vale has a variety of ways to configure a custom style - an existence style checks whether specific words or phrases have been used, and a substitution style suggests replacements.

extends: substitution
message: Consider using '%s' instead of '%s'
code: false
ignorecase: true
level: warning
  k8s: Kubernetes
  terraform: Terraform
  a11y: accessibility
  i18n: internationalisation

Saving this as value-styles/TechTerms/TechTerms.yml and adding TechTerms to the configuration under BasedOnStyles will wire this custom style into the linter. Testing it on my blog gives

$ vale _posts/*

 56:170  warning  Consider using 'Terraform'      TechTerms.TechTerms 
                  instead of 'terraform'                              

 27:99   warning  Consider using 'Terraform'      TechTerms.TechTerms 
                  instead of 'terraform'                              
 27:197  warning  Consider using 'Terraform'      TechTerms.TechTerms 
                  instead of 'terraform'               

These are both legit changes that I could make!


I’m enjoying the experimentation with different styles and examining my own prose for patterns. And I’m apparently really bad at passive voice!

Next, I think I’ll try and codify an existing style guide and release it as a project. Both the Guardian and Telegraph publish their newspaper style guides which might be fun to codify!

November is National Blog Posting Month, or NaBloPoMo. I’ll be endeavouring to write one blog post per day in the month of November 2019 - some short and sweet, others long and boring.