Basic linter types and attributes #
This file defines the basic types and attributes used by the linting
framework. A linter essentially consists of a function
(declaration : Name) → MetaM (Option MessageData)
, this function together with some
metadata is stored in the Linter
structure. We define two attributes:
@[env_linter]
applies to a declaration of typeLinter
and adds it to the default linter set.@[nolint linterName]
omits the tagged declaration from being checked by the linter with namelinterName
.
Returns true if decl
is an automatically generated declaration.
Also returns true if decl
is an internal name or created during macro
expansion.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A linting test for the #lint
command.
- test : Lean.Name → Lean.MetaM (Option Lean.MessageData)
test
defines a test to perform on every declaration. It should never fail. Returningnone
signifies a passing test. Returningsome msg
reports a failing test with errormsg
. - noErrorsFound : Lean.MessageData
noErrorsFound
is the message printed when all tests are negative - errorsFound : Lean.MessageData
errorsFound
is printed when at least one test is positive - isFast : Bool
If
isFast
is false, this test will be omitted from#lint-
.
Instances For
A NamedLinter
is a linter associated to a particular declaration.
- test : Lean.Name → Lean.MetaM (Option Lean.MessageData)
- noErrorsFound : Lean.MessageData
- errorsFound : Lean.MessageData
- isFast : Bool
- name : Lean.Name
The name of the named linter. This is just the declaration name without the namespace.
- declName : Lean.Name
The linter declaration name
Instances For
Gets a linter by declaration name.
Equations
- Batteries.Tactic.Lint.getLinter name declName = Batteries.Tactic.Lint.getLinter.unsafe_impl_1 name declName
Instances For
Defines the env_linter
extension for adding a linter to the default set.
Defines the @[env_linter]
attribute for adding a linter to the default set.
The form @[env_linter disabled]
will not add the linter to the default set,
but it will be shown by #list_linters
and can be selected by the #lint
command.
Linters are named using their declaration names, without the namespace. These must be distinct.
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[nolint linterName]
omits the tagged declaration from being checked by
the linter with name linterName
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Defines the user attribute nolint
for skipping #lint
Returns true if decl
should be checked
using linter
, i.e., if there is no nolint
attribute.
Equations
- Batteries.Tactic.Lint.shouldBeLinted linter decl = do let __do_lift ← Lean.getEnv pure !((Batteries.Tactic.Lint.nolintAttr.getParam? __do_lift decl).getD #[]).contains linter