Shard Detail

ameba v0.1.0

A static code analysis tool for Crystal
crystal linter linter-plugin

Install & Use

Add the following code to your project's shard.yml under:

dependencies to use in production
- OR -
development_dependencies to use in development

  github: crystal-ameba/ameba
  version: 0.1.0



Code style linter for Crystal

(a single-celled animal that catches food and moves about by extending fingerlike projections of protoplasm)


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 🚧


Add this to your application's shard.yml:

    github: veelenga/ameba

That will compile and install ameba binary onto your system.

Or just compile it from sources make install.


Run ameba binary to catch code issues within you project:

$ ameba
Inspecting 18 files.


18 inspected, 2 failures.

LineLength: Line too long (82 symbols)

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. self, source

  # 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 == "debugger" && node.args.empty? && node.obj.nil?

    source.error self, node.location.try &.line_number,
      "Possible forgotten debugger statement detected"


  • veelenga Vitalii Elenhaupt - creator, maintainer