shard-ameba/README.md

154 lines
4.2 KiB
Markdown
Raw Normal View History

2017-10-26 17:47:42 +00:00
<p align="center">
2017-12-12 06:16:34 +00:00
<img src="https://gitcdn.link/repo/veelenga/bin/master/ameba/logo.png" width="200">
2017-10-26 17:47:42 +00:00
<h3 align="center">Ameba</h3>
<p align="center">Code style linter for Crystal<p>
<p align="center">
<sup>
2017-11-16 09:42:14 +00:00
<i> (a single-celled animal that catches food and moves about by extending fingerlike projections of protoplasm) </i>
2017-10-26 17:47:42 +00:00
</sup>
</p>
2017-10-30 20:10:03 +00:00
<p align="center">
2017-11-03 10:12:45 +00:00
<a href="https://travis-ci.org/veelenga/ameba"><img src="https://travis-ci.org/veelenga/ameba.svg?branch=master"></a>
2017-10-30 20:10:03 +00:00
<a href="https://github.com/veelenga/ameba/releases"><img src="https://img.shields.io/github/release/veelenga/ameba.svg?maxAge=360"></a>
2017-11-02 08:39:29 +00:00
<a href="https://github.com/veelenga/ameba/blob/master/LICENSE"><img src="https://img.shields.io/github/license/veelenga/ameba.svg"></a>
<a href="https://gitter.im/veelenga/ameba?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge"><img src="https://badges.gitter.im/veelenga/ameba.svg"></a>
2017-10-30 20:10:03 +00:00
</p>
2017-10-26 17:47:42 +00:00
</p>
## About
2017-10-26 17:47:42 +00:00
2017-11-17 18:28:45 +00:00
Ameba is a static code analysis tool for the Crystal language.
It enforces a consistent [Crystal code style](https://crystal-lang.org/docs/conventions/coding_style.html),
also catches code smells and wrong code constructions.
2018-05-13 19:00:08 +00:00
See also [Roadmap](https://github.com/veelenga/ameba/wiki).
## Usage
Run `ameba` binary within your project directory to catch code issues:
```sh
$ ameba
Inspecting 107 files.
...............F.....................F....................................................................
src/ameba/rule/unneeded_disable_directive.cr:29:7
Lint/UselessAssign: Useless assignment to variable `s`
src/ameba/formatter/flycheck_formatter.cr:5:21
Lint/UnusedArgument: Unused argument `location`
2017-11-17 18:28:45 +00:00
Finished in 248.9 milliseconds
2017-11-17 18:28:45 +00:00
107 inspected, 2 failures.
```
2017-10-26 16:46:58 +00:00
## Installation
2017-11-14 18:52:15 +00:00
### As a project dependency:
2017-10-26 16:46:58 +00:00
Add this to your application's `shard.yml`:
```yaml
2017-10-26 17:47:42 +00:00
development_dependencies:
2017-10-26 16:46:58 +00:00
ameba:
2017-10-26 17:47:42 +00:00
github: veelenga/ameba
2018-08-15 16:49:42 +00:00
version: 0.8.0
2017-10-26 16:46:58 +00:00
```
Build `bin/ameba` binary within your project directory while running `shards install`.
2017-11-17 18:28:45 +00:00
You may also want to use it on [Travis](travis-ci.org):
```yaml
2017-11-17 18:28:45 +00:00
# .travis.yml
language: crystal
install:
- shards install
script:
- crystal spec
- bin/ameba
```
2017-11-14 18:52:15 +00:00
2017-11-17 18:58:52 +00:00
Using this config Ameba will inspect files just after the specs run. Travis will also fail
2017-11-17 18:28:45 +00:00
the build if some problems detected.
2017-11-14 18:52:15 +00:00
### OS X
2017-11-14 23:02:07 +00:00
```sh
2017-11-14 18:52:15 +00:00
$ brew tap veelenga/tap
$ brew install ameba
```
### Docker
Build the image:
```sh
$ docker build -t ameba/ameba .
```
To use the resulting image on a local source folder, mount the current (or target) directory into `/src`:
```sh
$ docker run -v $(pwd):/src ameba/ameba
```
2017-11-14 18:52:15 +00:00
### From sources
2017-10-26 16:46:58 +00:00
2017-11-14 23:02:07 +00:00
```sh
2017-11-14 18:52:15 +00:00
$ git clone https://github.com/veelenga/ameba && cd ameba
$ make install
```
2017-10-26 16:46:58 +00:00
## Configuration
2017-11-17 18:28:45 +00:00
Default configuration file is `.ameba.yml`.
2017-12-01 17:00:11 +00:00
It allows to configure rule properties, disable specific rules and exclude sources from the rules.
Generate new file by running `ameba --gen-config`.
2018-06-18 07:25:06 +00:00
### Only/Except
One or more rules, or a one or more group of rules can be included or excluded
via command line arguments:
```
$ ameba --only Lint/Syntax # runs only Lint/Syntax rule
$ ameba --only Style,Lint # runs only rules from Style and Lint groups
$ ameba --except Lint/Syntax # runs all rules except Lint/Syntax
$ ameba --except Style,Lint # runs all rules except rules in Style and Lint groups
```
### Inline disabling
One or more rules or one or more group of rules can be disabled using inline directives:
```crystal
# ameba:disable Style/LargeNumbers
time = Time.epoch(1483859302)
time = Time.epoch(1483859302) # ameba:disable Style/LargeNumbers, Lint/UselessAssign
time = Time.epoch(1483859302) # ameba:disable Style, Lint
```
## Editor integration
* Vim: [vim-crystal](https://github.com/rhysd/vim-crystal) (via [Syntastic](https://github.com/vim-syntastic/syntastic))
* Emacs: [ameba.el](https://github.com/veelenga/ameba.el)
2018-05-12 18:20:05 +00:00
* Sublime Text: [Sublime Linter Ameba](https://github.com/epergo/SublimeLinter-contrib-ameba)
2017-11-17 18:28:45 +00:00
## Credits & inspirations
- [Crystal Language](crystal-lang.org)
- [Rubocop](http://rubocop.readthedocs.io/en/latest/)
- [Credo](http://credo-ci.org/)
- [Dogma](https://github.com/lpil/dogma)
2017-10-26 16:46:58 +00:00
## Contributors
2017-10-26 17:47:42 +00:00
- [veelenga](https://github.com/veelenga) Vitalii Elenhaupt - creator, maintainer