mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Adjust readme
This commit is contained in:
parent
0f25b50a57
commit
766bcb3dd9
2 changed files with 36 additions and 12 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -6,3 +6,5 @@
|
||||||
# Libraries don't need dependency lock
|
# Libraries don't need dependency lock
|
||||||
# Dependencies will be locked in application that uses them
|
# Dependencies will be locked in application that uses them
|
||||||
/shard.lock
|
/shard.lock
|
||||||
|
|
||||||
|
*.html
|
46
README.md
46
README.md
|
@ -18,8 +18,19 @@
|
||||||
|
|
||||||
## About
|
## About
|
||||||
|
|
||||||
Ameba is a tool for enforcing a consistent Crystal code style, for catching code smells and wrong code constructions.
|
Ameba is a static code analysis tool for the Crystal language.
|
||||||
Ameba's [rules](src/ameba/rules/) traverse AST and report bad parts of your code.
|
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
|
||||||
|
|
||||||
|
Ameba's *"fingerlike projections"* are [rules](src/rule/). Each rule makes the inspection for that or
|
||||||
|
another problem in the source code. Currently rules are able to:
|
||||||
|
|
||||||
|
- [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)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
@ -35,9 +46,10 @@ development_dependencies:
|
||||||
|
|
||||||
Build `bin/ameba` binary within your project directory while running `crystal deps`.
|
Build `bin/ameba` binary within your project directory while running `crystal deps`.
|
||||||
|
|
||||||
You may want also use it on [Travis](travis-ci.org):
|
You may also want to use it on [Travis](travis-ci.org):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
# .travis.yml
|
||||||
language: crystal
|
language: crystal
|
||||||
install:
|
install:
|
||||||
- crystal deps
|
- crystal deps
|
||||||
|
@ -46,6 +58,9 @@ script:
|
||||||
- bin/ameba
|
- bin/ameba
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Using this config Ameba will inspect files just and the specs run. Travis will also fail
|
||||||
|
the build if some problems detected.
|
||||||
|
|
||||||
### OS X
|
### OS X
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
@ -64,7 +79,7 @@ $ make install
|
||||||
|
|
||||||
Run `ameba` binary within your project directory to catch code issues:
|
Run `ameba` binary within your project directory to catch code issues:
|
||||||
|
|
||||||
```sh
|
```
|
||||||
$ ameba
|
$ ameba
|
||||||
Inspecting 52 files.
|
Inspecting 52 files.
|
||||||
|
|
||||||
|
@ -86,11 +101,12 @@ Finished in 10.53 milliseconds
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
It is possible to configure or even disable specific rules using YAML configuration file.
|
Default configuration file is `.ameba.yml`.
|
||||||
By default Ameba is looking for `.ameba.yml` in a project root directory.
|
It allows to configure or even disable specific rules.
|
||||||
Copy and adjust [existed example](config/ameba.yml).
|
Simply copy and adjust [existed sample](config/ameba.yml).
|
||||||
|
Each rule is enabled by default, even if you remove it from the config file.
|
||||||
|
|
||||||
## Write a new Rule
|
## Writing a new Rule
|
||||||
|
|
||||||
Adding a new rule is as simple as inheriting from `Rule::Base` struct and implementing
|
Adding a new rule is as simple as inheriting from `Rule::Base` struct and implementing
|
||||||
your logic to detect a problem:
|
your logic to detect a problem:
|
||||||
|
@ -104,24 +120,30 @@ struct DebuggerStatement < Rule::Base
|
||||||
# source.error rule, line_number, message
|
# source.error rule, line_number, message
|
||||||
#
|
#
|
||||||
def test(source)
|
def test(source)
|
||||||
# This line deletegates verification to a particular AST visitor.
|
# This line deletegates verification to a particular callback in the AST visitor.
|
||||||
AST::Visitor.new self, source
|
AST::Visitor.new self, source
|
||||||
end
|
end
|
||||||
|
|
||||||
# This method is called once the visitor finds a required node.
|
# This method is called once the visitor finds a needed node.
|
||||||
def test(source, node : Crystal::Call)
|
def test(source, node : Crystal::Call)
|
||||||
# It reports an error, if there is `debugger` method call
|
# It reports an error, if there is `debugger` method call
|
||||||
# without arguments and a receiver. That's it, somebody forgot
|
# without arguments and a receiver. That's it, somebody forgot
|
||||||
# to remove a debugger statement.
|
# to remove a debugger statement.
|
||||||
return unless node.name == "debugger" && node.args.empty? && node.obj.nil?
|
return unless node.name == "debugger" && node.args.empty? && node.obj.nil?
|
||||||
|
|
||||||
source.error self, node.location,
|
source.error self, node.location, "Possible forgotten debugger statement detected"
|
||||||
"Possible forgotten debugger statement detected"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 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
|
## Contributors
|
||||||
|
|
||||||
- [veelenga](https://github.com/veelenga) Vitalii Elenhaupt - creator, maintainer
|
- [veelenga](https://github.com/veelenga) Vitalii Elenhaupt - creator, maintainer
|
||||||
|
|
Loading…
Reference in a new issue