ameba

A static code analysis tool linter ameba code-analysis static-analysis
0.8.1 released

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.1

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

Docker

Build the image:

$ docker build -t ameba/ameba .

To use the resulting image on a local source folder, mount the current (or target) directory into /src:

$ docker run -v $(pwd):/src ameba/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

Credits & inspirations

Contributors

  • veelenga Vitalii Elenhaupt - creator, maintainer
ameba:
  github: crystal-ameba/ameba
  version: ~> 0.8.1
License MIT
Crystal 0.25.1

Authors

Dependencies 0

Development Dependencies 0

Dependents 259

Show all 259 dependents

Other repos 1

Last synced .
search fire star recently