Skip to content

Commit

Permalink
Improve usage info & remove useless stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
veelenga committed May 8, 2018
1 parent 1fc0c52 commit 58e6b42
Showing 1 changed file with 20 additions and 59 deletions.
79 changes: 20 additions & 59 deletions README.md
Expand Up @@ -22,15 +22,28 @@ 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.

## How it works
## 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
UselessAssign: Useless assignment to variable `s`

src/ameba/formatter/flycheck_formatter.cr:5:21
UnusedArgument: Unused argument `location`

Ameba's *"fingerlike projections"* are [rules](src/ameba/rule/). Each rule makes the inspection for that or
another problem in the source code. Currently rules are able to:
Finished in 248.9 milliseconds

- [x] simply validate lines of source code
- [x] traverse AST using [`Crystal::Visitor`](https://github.com/crystal-lang/crystal/blob/1f3e8b0e742b55c1feb5584dc932e87034365f48/src/compiler/crystal/syntax/visitor.cr)
- [x] tokenize sources using [`Crystal::Lexer`](https://github.com/crystal-lang/crystal/blob/1f3e8b0e742b55c1feb5584dc932e87034365f48/src/compiler/crystal/syntax/lexer.cr) and iterate through tokens
- [ ] do semantics analysis using [`Crystal::SemanticVisitor`](https://github.com/crystal-lang/crystal/blob/master/src/compiler/crystal/semantic/semantic_visitor.cr)
107 inspected, 2 failures.

```

## Installation

Expand Down Expand Up @@ -75,30 +88,6 @@ $ git clone https://github.com/veelenga/ameba && cd ameba
$ make install
```

## Usage

Run `ameba` binary within your project directory to catch code issues:

```sh
$ ameba
Inspecting 52 files.

.........................F.......F........F.........

src/ameba/ast/traverse.cr:27:5
PredicateName: Favour method name 'node?' over 'is_node?'

src/ameba/rules/empty_expression.cr:42:7
LiteralInCondition: Literal value found in conditional

src/ameba/rules/empty_expression.cr:30:7
UnlessElse: Favour if over unless with else

Finished in 10.53 milliseconds

52 inspected, 3 failures.
```
## Configuration

Default configuration file is `.ameba.yml`.
Expand All @@ -117,34 +106,6 @@ time = Time.epoch(1483859302)
time = Time.epoch(1483859302) # ameba:disable LargeNumbers
```

## Writing a new Rule
Adding a new rule is as simple as inheriting from `Ameba::Rule::Base` struct and implementing
a logic to detect a problem in the source file:
```crystal
struct MySuperRule < Ameba::Rule::Base
# This is a required method to be implemented by the rule.
# Source will be passed here. If rule detects an issue in the source,
# it reports an error:
#
# source.error rule, location, message
#
def test(source)
# TODO: test source
end
end
```
As soon as a custom rule is defined, it becomes available in a full set of rules
executed by default and also can be configured via config file:
```yaml
MySuperRule:
Enabled: false
```
## Editor integration

* Vim: [vim-crystal](https://github.com/rhysd/vim-crystal) (via [Syntastic](https://github.com/vim-syntastic/syntastic))
Expand Down

0 comments on commit 58e6b42

Please sign in to comment.