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](https://crystal-lang.org/docs/conventions/coding_style.html), also catches code smells and wrong code constructions. 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` Finished in 248.9 milliseconds 107 inspected, 2 failures. ``` ## Installation ### As a project dependency: Add this to your application's `shard.yml`: ```yaml development_dependencies: ameba: github: veelenga/ameba version: 0.8.1 ``` Build `bin/ameba` binary within your project directory while running `shards install`. You may also want to use it on [Travis](travis-ci.org): ```yaml # .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 ```sh $ 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 ``` ### From sources ```sh $ 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: ```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) * Sublime Text: [Sublime Linter Ameba](https://github.com/epergo/SublimeLinter-contrib-ameba) ## 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) ## Contributors - [veelenga](https://github.com/veelenga) Vitalii Elenhaupt - creator, maintainer