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…
	
	Add table
		Add a link
		
	
		Reference in a new issue