mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Usage info & exclude lib/ project folder
This commit is contained in:
parent
6ca4e38167
commit
628077066e
2 changed files with 43 additions and 14 deletions
55
README.md
55
README.md
|
@ -17,9 +17,12 @@
|
|||
</p>
|
||||
</p>
|
||||
|
||||
## Status
|
||||
## About
|
||||
|
||||
**CONSTRUCTION ZONE** :construction:
|
||||
Ameba is a tool for enforcing a consistent Crystal code style, for catching code smells and wrong code constructions.
|
||||
Ameba's [rules](src/ameba/rules/) traverse AST and report bad parts of your code.
|
||||
|
||||
Is still under construction, compatibility may be broken :construction:
|
||||
|
||||
## Installation
|
||||
|
||||
|
@ -31,15 +34,16 @@ development_dependencies:
|
|||
github: veelenga/ameba
|
||||
```
|
||||
|
||||
That will compile and install `ameba` binary onto your system.
|
||||
|
||||
Or just compile it from sources `make install`.
|
||||
|
||||
## Usage
|
||||
|
||||
```crystal
|
||||
require "ameba"
|
||||
|
||||
Ameba.run
|
||||
```
|
||||
Run `ameba` binary to catch code issues within you project:
|
||||
|
||||
```sh
|
||||
$ ameba
|
||||
Inspecting 18 files.
|
||||
|
||||
|
||||
|
@ -54,13 +58,38 @@ src/ameba.cr:12
|
|||
UnlessElse: Favour if over unless with else
|
||||
```
|
||||
|
||||
## Contributing
|
||||
## Write a new Rule
|
||||
|
||||
1. Fork it ( https://github.com/veelenga/ameba/fork )
|
||||
2. Create your feature branch (git checkout -b my-new-feature)
|
||||
3. Commit your changes (git commit -am 'Add some feature')
|
||||
4. Push to the branch (git push origin my-new-feature)
|
||||
5. Create a new Pull Request
|
||||
Adding a new rule is as simple as inheriting from `Rule` struct and implementing
|
||||
your logic to detect a problem:
|
||||
|
||||
```crystal
|
||||
struct DebuggerStatement < Rule
|
||||
# This is a required method to be implemented by the rule.
|
||||
# Source will pass here. If rule finds an issue in this source,
|
||||
# it adds an error:
|
||||
#
|
||||
# source.error rule, line_number, message
|
||||
#
|
||||
def test(source)
|
||||
# This line deletegates verification to a particular AST visitor.
|
||||
AST::CallVisitor.new self, source
|
||||
end
|
||||
|
||||
# This method is called once our visitor finds a required node.
|
||||
#
|
||||
# It reports an error, once there is `debugger` method call
|
||||
# without arguments and a receiver. That's it, somebody forgot
|
||||
# to remove debugger statement.
|
||||
def test(source, node : Crystal::Call)
|
||||
return unless node.name == "debugger" && node.args.empty? && node.obj.nil?
|
||||
|
||||
source.error self, node.location.try &.line_number,
|
||||
"Possible forgotten debugger statement detected"
|
||||
end
|
||||
end
|
||||
|
||||
```
|
||||
|
||||
## Contributors
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ module Ameba
|
|||
end
|
||||
|
||||
def run(formatter = DotFormatter.new)
|
||||
run Dir["**/*.cr"], formatter
|
||||
run Dir["**/*.cr"].reject(&.starts_with? "lib/"), formatter
|
||||
end
|
||||
|
||||
def run(files, formatter : Formatter)
|
||||
|
|
Loading…
Reference in a new issue