mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
No description
f27e32cbea
closes #13 ``` $ crystal bench/check_sources.cr --release == Compare: 1 source 1.1k ( 907.18µs) (± 2.24%) fastest 3 sources 649.18 ( 1.54ms ) (± 2.26%) 1.70× slower 5 sources 196.85 ( 5.08ms ) (± 2.20%) 5.60× slower 10 sources 96.37 ( 10.38ms ) (± 2.06%) 11.44× slower 20 sources 58.88 ( 16.98ms ) (± 3.53%) 18.72× slower 30 sources 46.43 ( 21.54ms ) (± 3.38%) 23.74× slower 40 sources 46.19 ( 21.65ms ) (± 2.45%) 23.86× slower == Measure: 0.060000 0.040000 0.100000 ( 0.080935 ) ``` |
||
---|---|---|
bench | ||
bin | ||
spec | ||
src | ||
.editorconfig | ||
.gitignore | ||
.travis.yml | ||
LICENSE | ||
Makefile | ||
README.md | ||
shard.yml |
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 tool for enforcing a consistent Crystal code style, for catching code smells and wrong code constructions. Ameba's rules traverse AST and report bad parts of your code.
Is still under construction, compatibility may be broken 🚧
Installation
Add this to your application's shard.yml
:
development_dependencies:
ameba:
github: veelenga/ameba
That will compile and install ameba
binary onto your system.
Or just compile it from sources make install
.
Usage
Run ameba
binary to catch code issues within you project:
$ ameba
Inspecting 18 files.
...............F.F
18 inspected, 2 failures.
src/ameba/source.cr:26
LineLength: Line too long (82 symbols)
src/ameba.cr:12
UnlessElse: Favour if over unless with else
Write a new Rule
Adding a new rule is as simple as inheriting from Rule
struct and implementing
your logic to detect a problem:
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
- veelenga Vitalii Elenhaupt - creator, maintainer