# svlint
SystemVerilog linter
[![Actions Status](https://github.com/dalance/svlint/workflows/Regression/badge.svg)](https://github.com/dalance/svlint/actions)
[![Snap Status](https://build.snapcraft.io/badge/dalance/svlint.svg)](https://build.snapcraft.io/user/dalance/svlint)
[![codecov](https://codecov.io/gh/dalance/svlint/branch/master/graph/badge.svg)](https://codecov.io/gh/dalance/svlint)
[![Crates.io](https://img.shields.io/crates/v/svlint.svg)](https://crates.io/crates/svlint)
[![svlint](https://snapcraft.io/svlint/badge.svg)](https://snapcraft.io/svlint)
![svlint](https://user-images.githubusercontent.com/4331004/67759664-377b5480-fa83-11e9-895f-7deef6dde516.png)
## Installation
### Download binary
Download from [release page](https://github.com/dalance/svlint/releases/latest), and extract to the directory in PATH.
### snapcraft
You can install from [snapcraft](https://snapcraft.io/svlint)
```
sudo snap install svlint
```
### Cargo
You can install by [cargo](https://crates.io/crates/svlint).
```
cargo install svlint
```
## Usage
### Configuration
First of all, you must put a configuration file `.svlint.toml` to specify enabled rules.
Configuration file is searched to the upper directory until `/`.
So you can put configuration file (`.svlint.toml`) on the repository root like `.gitignore`.
The example of configuration file is below:
```toml
[option]
exclude_paths = ["ip/.*"]
[rules]
non_ansi_module = true
wire_reg = true
```
The complete example can be generated by `svlint --example`
#### `[option]` section
`exclude_paths` is a list of regular expression. If a file path is matched with the list, the file is skipped to check.
#### `[rules]` section
By default, all rules are disabled. If you want to enable some rules, `true` can be specified.
#### Configuration update
If svlint is updated, `.svlint.toml` can be updated to the latest version by `svlint --update`.
### Rules
All rules are [here](./RULES.md).
Suggesting a new rule through [Issues](https://github.com/dalance/svlint/issues) or [Pull requests](https://github.com/dalance/svlint/pulls) is welcome.
### Plugin
svlint supports rule plugin. A sample project is below:
https://github.com/dalance/svlint-plugin-sample
### Filelist
svlint supports filelist like major EDA tools.
The following features are supported.
* Substitute environment variables
* Specify include directories by `+incdir`
* Define Verilog define by `+define`
* Include other filelists by `-f`
An example is below:
```
xxx.sv
${XXX_DIR}/yyy.sv
$(XXX_DIR)/zzz.sv
+incdir+$(PWD)/header/src
+define+SYNTHESIS
-f other.f
```
### Option
```
svlint 0.2.12
USAGE:
svlint [FLAGS] [OPTIONS] <files>...
FLAGS:
--example Prints config example
-h, --help Prints help information
-s, --silent Suppresses message
-1 Prints results by single line
--update Updates config
-V, --version Prints version information
-v, --verbose Prints verbose message
OPTIONS:
-c, --config <config> Config file [default: .svlint.toml]
-d, --define <defines>... Define
-f, --filelist <filelist>... File list
-i, --include <includes>... Include path
-p, --plugin <plugins>... Plugin file
ARGS:
<files>... Source file
```