4 KiB
Ameba
Code style linter for Crystal
(a single-celled animal that catches food and moves about by extending fingerlike projections of protoplasm)
About
Ameba is a static code analysis tool for the Crystal language. It enforces a consistent Crystal code style, also catches code smells and wrong code constructions.
See also Roadmap.
Usage
Run ameba
binary within your project directory to catch code issues:
$ 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`
Finished in 248.9 milliseconds
107 inspected, 2 failures.
Installation
As a project dependency:
Add this to your application's shard.yml
:
development_dependencies:
ameba:
github: veelenga/ameba
version: 0.8.0
Build bin/ameba
binary within your project directory while running shards install
.
You may also want to use it on Travis:
# .travis.yml
language: crystal
install:
- shards install
script:
- crystal spec
- bin/ameba
Using this config Ameba will inspect files just after the specs run. Travis will also fail the build if some problems detected.
OS X
$ brew tap veelenga/tap
$ brew install ameba
From sources
$ git clone https://github.com/veelenga/ameba && cd ameba
$ make install
Configuration
Default configuration file is .ameba.yml
.
It allows to configure rule properties, disable specific rules and exclude sources from the rules.
Generate new file by running ameba --gen-config
.
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:
# 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 (via Syntastic)
- Emacs: ameba.el
- Sublime Text: Sublime Linter Ameba
Credits & inspirations
Contributors
- veelenga Vitalii Elenhaupt - creator, maintainer