Configuring Flow's linting
Even though ESLint has us well covered for avoiding JS bad coding practices, it doesn't do much with regard to data types, but Flow can help us in this area.
There is a set of rules you can apply, and you will configure them through the .flowconfig file we mentioned in the previous section:
[lints]
all=warn
unsafe-getters-setters=off
The first line, all=warn, is a catch-all, which defines the standard setting for all rules; possible values are off, warn, and error. After that, you can specify settings for individual rules; for example, in the preceding code I decided to ignore warnings about unsafe getters or setters. Some rules are as follows:
- sketchy-null, which applies whenever you test the value of a variable that could be false (for example, zero) but also null or undefined, in the context of something like if (x) { ... }. This warning is meant to remind you that the variable might have a value you weren't considering.
- sketchy-null-bool, sketchy-null-number, sketchy-null-string, and sketchy-null-mixed are more granular versions of sketchy-null, and apply only to the specified data types.
- unclear-type warns about using any, Object, or Function as data type annotations.
- untyped-import and untyped-type-import warn you against importing from untyped files.
- unsafe-getters-setters advises against using getters or setters, because of their side effects.
You should also set include_warnings to true, in order to be able to get warnings in VSC:
[options]
include_warnings=true
Whatever settings you include in .fontconfig will apply globally to your entire project, but you can also change them on a file-by-file basis, or even for a single line of code, along the same lines as with ESLint. You can disable warnings for a line by using a flowlint-next-line comment and listing the rules you want to change:
// flowlint-next-line sketchy-null-bool:off
if (x) {
// ...
}
There is another comment, flowlint, that applies to the complete file. Checkout https://flow.org/en/docs/linting/flowlint-comments/ for more possibilities.