mirror of
				https://gitea.invidious.io/iv-org/shard-ameba.git
				synced 2024-08-15 00:53:29 +00:00 
			
		
		
		
	Improve usage info & remove useless stuff
This commit is contained in:
		
							parent
							
								
									1fc0c525bd
								
							
						
					
					
						commit
						58e6b42ea9
					
				
					 1 changed files with 20 additions and 59 deletions
				
			
		
							
								
								
									
										79
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										79
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
					@ -22,15 +22,28 @@ Ameba is a static code analysis tool for the Crystal language.
 | 
				
			||||||
It enforces a consistent [Crystal code style](https://crystal-lang.org/docs/conventions/coding_style.html),
 | 
					It enforces a consistent [Crystal code style](https://crystal-lang.org/docs/conventions/coding_style.html),
 | 
				
			||||||
also catches code smells and wrong code constructions.
 | 
					also catches code smells and wrong code constructions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## How it works
 | 
					## Usage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Ameba's *"fingerlike projections"* are [rules](src/ameba/rule/). Each rule makes the inspection for that or
 | 
					Run `ameba` binary within your project directory to catch code issues:
 | 
				
			||||||
another problem in the source code. Currently rules are able to:
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [x] simply validate lines of source code
 | 
					```sh
 | 
				
			||||||
- [x] traverse AST using [`Crystal::Visitor`](https://github.com/crystal-lang/crystal/blob/1f3e8b0e742b55c1feb5584dc932e87034365f48/src/compiler/crystal/syntax/visitor.cr)
 | 
					$ ameba
 | 
				
			||||||
- [x] tokenize sources using [`Crystal::Lexer`](https://github.com/crystal-lang/crystal/blob/1f3e8b0e742b55c1feb5584dc932e87034365f48/src/compiler/crystal/syntax/lexer.cr) and iterate through tokens
 | 
					Inspecting 107 files.
 | 
				
			||||||
- [ ] do semantics analysis using [`Crystal::SemanticVisitor`](https://github.com/crystal-lang/crystal/blob/master/src/compiler/crystal/semantic/semantic_visitor.cr)
 | 
					
 | 
				
			||||||
 | 
					...............F.....................F...............................................
 | 
				
			||||||
 | 
					.....................
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					src/ameba/rule/unneeded_disable_directive.cr:29:7
 | 
				
			||||||
 | 
					UselessAssign: Useless assignment to variable `s`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					src/ameba/formatter/flycheck_formatter.cr:5:21
 | 
				
			||||||
 | 
					UnusedArgument: Unused argument `location`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Finished in 248.9 milliseconds
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					107 inspected, 2 failures.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Installation
 | 
					## Installation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,30 +88,6 @@ $ git clone https://github.com/veelenga/ameba && cd ameba
 | 
				
			||||||
$ make install
 | 
					$ make install
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Usage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Run `ameba` binary within your project directory to catch code issues:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```sh
 | 
					 | 
				
			||||||
$ ameba
 | 
					 | 
				
			||||||
Inspecting 52 files.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.........................F.......F........F.........
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
src/ameba/ast/traverse.cr:27:5
 | 
					 | 
				
			||||||
PredicateName: Favour method name 'node?' over 'is_node?'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
src/ameba/rules/empty_expression.cr:42:7
 | 
					 | 
				
			||||||
LiteralInCondition: Literal value found in conditional
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
src/ameba/rules/empty_expression.cr:30:7
 | 
					 | 
				
			||||||
UnlessElse: Favour if over unless with else
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Finished in 10.53 milliseconds
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
52 inspected, 3 failures.
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Configuration
 | 
					## Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Default configuration file is `.ameba.yml`.
 | 
					Default configuration file is `.ameba.yml`.
 | 
				
			||||||
| 
						 | 
					@ -117,34 +106,6 @@ time = Time.epoch(1483859302)
 | 
				
			||||||
time = Time.epoch(1483859302) # ameba:disable LargeNumbers
 | 
					time = Time.epoch(1483859302) # ameba:disable LargeNumbers
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Writing a new Rule
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Adding a new rule is as simple as inheriting from `Ameba::Rule::Base` struct and implementing
 | 
					 | 
				
			||||||
a logic to detect a problem in the source file:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```crystal
 | 
					 | 
				
			||||||
struct MySuperRule < Ameba::Rule::Base
 | 
					 | 
				
			||||||
  # This is a required method to be implemented by the rule.
 | 
					 | 
				
			||||||
  # Source will be passed here. If rule detects an issue in the source,
 | 
					 | 
				
			||||||
  # it reports an error:
 | 
					 | 
				
			||||||
  #
 | 
					 | 
				
			||||||
  #   source.error rule, location, message
 | 
					 | 
				
			||||||
  #
 | 
					 | 
				
			||||||
  def test(source)
 | 
					 | 
				
			||||||
    # TODO: test source
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
As soon as a custom rule is defined, it becomes available in a full set of rules
 | 
					 | 
				
			||||||
executed by default and also can be configured via config file:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
MySuperRule:
 | 
					 | 
				
			||||||
  Enabled: false
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Editor integration
 | 
					## Editor integration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 * Vim: [vim-crystal](https://github.com/rhysd/vim-crystal) (via [Syntastic](https://github.com/vim-syntastic/syntastic))
 | 
					 * Vim: [vim-crystal](https://github.com/rhysd/vim-crystal) (via [Syntastic](https://github.com/vim-syntastic/syntastic))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue