Commit Graph

568 Commits

Author SHA1 Message Date
Vitalii Elenhaupt f4680a75f4
Apply default formatting 2018-09-03 00:17:56 +03:00
Vitalii Elenhaupt d60aea102f
Add --no-color cli flag
closes #72
2018-08-13 00:05:11 +03:00
Vitalii Elenhaupt 248c5a656b
Add `--all` cli flag that enables all available rules 2018-07-04 15:20:35 +03:00
Vitalii Elenhaupt 970ca4be1b
Disable PredicateName and LargeNumbers rules by default 2018-07-04 14:11:24 +03:00
Vitalii Elenhaupt dbac46b68a
Ignore outer shadowing of throwaway variables
closes #67
2018-06-25 17:02:46 +03:00
Vitalii Elenhaupt 98f0aa71e9
Allow to disable group of rules using inline directives 2018-06-23 16:52:48 +03:00
Vitalii Elenhaupt 04c7300964
Handle type declarations in scopes
closes #66
2018-06-23 08:48:13 +03:00
V. Elenhaupt fafc5f4bdc
Allow filtering by group name (#65) 2018-06-18 10:25:06 +03:00
V. Elenhaupt 4cb5328513
Add rule namespaces: style, lint, layout (#63) 2018-06-16 14:50:59 +03:00
Vitalii Elenhaupt 23245d0e52 Add end_location to json formatter 2018-06-12 12:55:56 +03:00
Vitalii Elenhaupt f8d14d4222 Rename Error to Issue 2018-06-12 12:55:56 +03:00
Vitalii Elenhaupt e1b51f62a5
Exclude file pattern match
closes #61
2018-05-29 13:19:00 +03:00
Vitalii Elenhaupt c12b4f1aa5 Shadowed argument 2018-05-29 09:47:32 +03:00
Vitalii Elenhaupt 15bb8f5331 Detect shadowing outer local vars 2018-05-29 09:47:20 +03:00
Vitalii Elenhaupt 3887da1438 Redundant begin: do not report if there is an inner handler
fixes #56
2018-05-25 11:23:11 +03:00
Brian J. Cardiff 3e099e9afc Support upcoming Crystal 0.25.0
The changes are compatible with crystal 0.24.2
2018-05-23 13:29:27 +03:00
Vitalii Elenhaupt 1cea21b147
Do not report float numbers as large if fraction has less than 3 digits 2018-05-13 19:04:15 +03:00
Vitalii Elenhaupt 7a4fcec5ce
Prefer Tuple over Array to format a message to reduce GC 2018-05-13 14:59:30 +03:00
Vitalii Elenhaupt 402a0c0dab
Unused argument name suggession 2018-05-13 14:13:57 +03:00
Vitalii Elenhaupt bf907ee98b
Rework variable references detection in macro 2018-05-12 20:08:24 +03:00
Vitalii Elenhaupt efe67212b0
Support of Crystal::UnitializedVar 2018-05-12 18:29:31 +03:00
Vitalii Elenhaupt 415432713a
Prevent false positiveness cause by macro literals
https://github.com/crystal-lang/crystal/pull/6055#issuecomment-386376227
2018-05-12 17:37:54 +03:00
Vitalii Elenhaupt 6579c8f573
Ignore config if todo formatter is used
Fixes #53
2018-05-11 21:39:09 +03:00
Vitalii Elenhaupt 4546b90b54 Add JSON formatter 2018-05-11 21:28:30 +03:00
Vitalii Elenhaupt fa7f5c5b28
Support Crystal <= 0.24.2 2018-05-09 12:53:01 +03:00
Vitalii Elenhaupt 1fc0c525bd
Do not report unneeded disable directive if directive is used one line above 2018-05-09 00:14:46 +03:00
Vitalii Elenhaupt c7fc905413
Mark the internal visitor class as private 2018-05-08 22:23:01 +03:00
Vitalii Elenhaupt eab5499f8e
Add a workaround for https://github.com/crystal-lang/crystal/pull/6032 2018-05-08 22:18:15 +03:00
V. Elenhaupt c2aa526e21
Unused argument rule (#52)
* Unused argument rule

* IgnoreDefs, IgnoreBlocks, IgnoreProcs parameters

* Implicit reference by super keyworkd

* Handle macro arguments
2018-05-08 22:00:17 +03:00
Vitalii Elenhaupt cc71511080
Use Var#special_var? to check if var is special 2018-05-04 16:25:44 +03:00
V. Elenhaupt 6475c2bb25
Variable scope & useless assignments (#41)
* AST::Visitor -> AST::NodeVisitor

* Scope & ScopeVisitor

* Useless assignment rule

* Instance vars and useless assignments

* Multiple assigns one by one

* Support outer scope

* Variable used in the useless assignment

* Support OpAssign & MultiAssign

* Captured by block

* Variable, Assignment, Reference & Refactoring

* Variable has references, Assignment can be referenced

* Branch entity

* Handle useless assignments in branches

* Handle assignments in a loop

* Handle branch equality

* Handle special var `$?` assignment

* Improve captured by block stuff

* Avoid assignments in property definitions

(UselessAssign rule reports an warning)

* Support MacroIf and MacroFor branches

* Handle assignments with shadowed vars in inner scopes

* Add method arguments as scope variables

* Handle case if branch is blank

* Top level scope

* Handle case when branch is nop?
2018-05-03 18:57:47 +03:00
V. Elenhaupt 60c1b86890
Constantize string error messages (#50) 2018-04-17 07:29:43 +03:00
Vitalii Elenhaupt d307f01bfa
Add a space delimiter to duplicated hash keys 2018-04-13 20:10:21 +03:00
Hugo Abonizio 21a3850a65 Ignore alternative names starting with `_` 2018-04-12 19:20:41 +03:00
Hugo Abonizio d6c6af883d Ignores PredicateName if alternative isn't valid (e.g. is_404?) 2018-04-12 19:20:41 +03:00
Vitalii Elenhaupt 9e2ab9c002
Show hash duplicated keys in error message
closes #45
2018-04-12 19:18:33 +03:00
Vitalii Elenhaupt 2f837375ec New rule: rand zero 2018-03-08 18:59:20 +02:00
Vitalii Elenhaupt eda5960b0f Check for unneeded directives when all other rules are done 2018-02-02 22:17:04 +02:00
Vitalii Elenhaupt 6fb483a2dd Prevent disabling of UnneededDisableDirective rule 2018-02-02 22:17:04 +02:00
Vitalii Elenhaupt 8075c39aa9 Unneeded disable directive 2018-02-02 22:17:04 +02:00
Vitalii Elenhaupt 2382657e15
Add rule's name to flycheck formatter 2018-01-31 13:30:59 +02:00
Vitalii Elenhaupt 69cff77970 Add DisabledFormatter to trace disabled lines 2018-01-30 16:09:00 +02:00
Vitalii Elenhaupt 9f85b16e09 Add inline directives parsing and disabling 2018-01-30 16:09:00 +02:00
Vitalii Elenhaupt 55b66e7975 Use more natural way to define error with custom loc 2018-01-30 16:09:00 +02:00
Vitalii Elenhaupt 1d436fbb94
Allow to configure formatter via configuration file
closes #20
2018-01-25 16:53:08 +02:00
Vitalii Elenhaupt 4c85ad7c75 Syntax rule running priorities 2018-01-25 12:37:25 +02:00
Vitalii Elenhaupt c9db63bf34 Syntax rule 2018-01-25 12:37:25 +02:00
Vitalii Elenhaupt ca502754b6
Allow to inspect a directory 2018-01-24 14:02:18 +02:00
Vitalii Elenhaupt 51fa9f024b
Much simpler way to build todo yaml
https://stackoverflow.com/a/39906916/1586762

thx @asterite 🎉
2017-12-29 12:11:38 +02:00
Vitalii Elenhaupt 7e8703dda0 Crystal 0.24.1 support 2017-12-26 18:21:21 +02:00
Vitalii Elenhaupt eca0d28692
Excluded relative path path 2017-12-18 13:06:19 +02:00
Vitalii Elenhaupt b515faff87 Add cmd specs 2017-12-11 11:19:56 +02:00
Vitalii Elenhaupt e1fa8677b0 Add flycheck formatter
refs #26
2017-12-11 11:19:56 +02:00
V. Elenhaupt f12a224dad
New rule: shadowed exception (#25) 2017-12-06 16:59:10 +02:00
Vitalii Elenhaupt 96c1af4e35
New rule: useless condition in when
thanks to @hugoabonizio for suggesstion
2017-12-02 21:55:50 +02:00
Vitalii Elenhaupt 8bf5066d6a Add Excluded property to the rule 2017-12-01 19:01:25 +02:00
Vitalii Elenhaupt a1854c0aa3 TODO formatter 2017-12-01 19:01:25 +02:00
Vitalii Elenhaupt bc552d0730 Generate config
closes #17
2017-12-01 19:01:25 +02:00
Vitalii Elenhaupt db815a2e30
Fix error message 2017-12-01 00:03:05 +02:00
Luis Lavena 27384ed889 Recognize individual files to process from CLI (#23)
Recent refactor of code introduced a regression: provide individual
files to CLI resulted in all *.cr files being processed instead, so
given file was ignored.

This change restores the original behavior that allows more fine
grained execution.
2017-11-29 10:52:40 +02:00
Hugo Abonizio b023ae0baa Disallows `while true` (#22)
* Disallows `while true`

* Add syntax highlighting in documentation

* Replace `while true` occurrencies

* Add WhileTrue rule to config sample
2017-11-27 15:35:15 +02:00
Vitalii Elenhaupt 21abce63bd
Report only wrong predicate names 2017-11-23 19:58:59 +02:00
Vitalii Elenhaupt dceafd26e5
Except & only cli flags 2017-11-23 19:49:45 +02:00
Vitalii Elenhaupt 34707903b8
Fix nodoc 2017-11-23 10:54:56 +02:00
Vitalii Elenhaupt f4f401d56f
Make config loading more flexible 2017-11-23 10:41:22 +02:00
Vitalii Elenhaupt b5c9f4dff6
Fix mistakes/typos 2017-11-19 13:31:20 +02:00
Vitalii Elenhaupt 0520774930
New rule: duplicated when 2017-11-18 18:39:45 +02:00
Vitalii Elenhaupt 1839ef2ab5
New rule: hash duplicated key 2017-11-18 00:51:16 +02:00
Vitalii Elenhaupt 791bfdabb8
New rule: percent arrays 2017-11-17 23:56:52 +02:00
Vitalii Elenhaupt 0f25b50a57
Add missing YAML sample 2017-11-17 19:34:01 +02:00
Vitalii Elenhaupt 3c9df13beb
New option: LargeNumbers#int_min_digits (default: 5) 2017-11-17 19:07:39 +02:00
Vitalii Elenhaupt b3a9ff2fa0
Mark `begin; end` as empty expression 2017-11-17 18:32:40 +02:00
Vitalii Elenhaupt fb398b5056
New rule: redundant begin 2017-11-17 18:15:11 +02:00
Vitalii Elenhaupt e5081fa970
New rule: empty ensure 2017-11-16 16:31:32 +02:00
Vitalii Elenhaupt 57b1095c5f
Document entities 2017-11-15 23:37:16 +02:00
Vitalii Elenhaupt 198d024782
v0.2.0 2017-11-14 19:40:42 +02:00
Vitalii Elenhaupt 8f4def5407
Load default config if no cli args specified 2017-11-14 11:48:06 +02:00
Vitalii Elenhaupt 06855816d7
Document configuration properties & specs 2017-11-14 10:28:26 +02:00
Vitalii Elenhaupt 822a69b81c
Base YAML config loader & Ameba runner 2017-11-14 09:00:15 +02:00
Vitalii Elenhaupt 80e2ab4f55
Ameba::Rule -> Ameba::Rule::Base 2017-11-08 00:02:32 +02:00
Vitalii Elenhaupt b6c0d3e8ad
Refactor comparison to boolean rule 2017-11-07 23:40:06 +02:00
Vitalii Elenhaupt e718c90f16
Source#content -> Source#code, Source::Error#pos -> Source::Error#location 2017-11-07 23:02:38 +02:00
Vitalii Elenhaupt 9036a7ca71
New rule: empty assignment 2017-11-07 20:54:28 +02:00
Vitalii Elenhaupt a9421ee79b
AST node source code 2017-11-07 13:28:33 +02:00
V. Elenhaupt adfe654733
Performance improvements (#15)
* Performance improvements

Two main changes:

1. Cache parsed AST in a Source. So Parser will parse content only once.
2. Use one unified visitor with multiple callbacks instead of multiple
visitors to traverse AST.

This improves performance significantly, for example running it on
Crystal repository takes ~1 second, which 6 times faster than before.

* Change readme example
2017-11-06 20:54:58 +02:00
Vitalii Elenhaupt f878ac430f
Refactor formatters 2017-11-06 10:41:03 +02:00
Vitalii Elenhaupt 1a3bb3629e
Line lenght: 80 symbols 2017-11-06 08:54:59 +02:00
V. Elenhaupt 374956f3dd
Fix travis build & new rule: constant names (#14) 2017-11-05 22:08:01 +02:00
Vitalii Elenhaupt 8440747353
New rule: variable names 2017-11-04 23:13:38 +02:00
Vitalii Elenhaupt 3d4c44c333
New rule: method names 2017-11-04 22:54:27 +02:00
Vitalii Elenhaupt 20fd53682f
New rule: type names 2017-11-04 18:57:35 +02:00
Vitalii Elenhaupt e383ec17c2
Refactor tokenizer 2017-11-04 17:38:04 +02:00
Vitalii Elenhaupt fedc29ceb6
Remove crystal syntax highliting 2017-11-04 16:49:50 +02:00
V. Elenhaupt 2f9ba27811
Large numbers rule + tokenizer (#10) 2017-11-04 16:43:40 +02:00
Vitalii Elenhaupt 75ec695a62
Colorize dot formatter
closes #1
2017-11-01 22:37:21 +02:00
Vitalii Elenhaupt 67506fc643
New rule: negated conditions in unless 2017-11-01 21:30:30 +02:00
Vitalii Elenhaupt 996dc962db
Style improvements 2017-11-01 19:30:08 +02:00
Vitalii Elenhaupt 0ca990dd5c
New rule: predicate name 2017-11-01 15:20:04 +02:00
Vitalii Elenhaupt 348496ab9d
New rule: debugger statement 2017-11-01 14:44:00 +02:00
Vitalii Elenhaupt 64ccc7448c
New rule: literal in the interpolation 2017-11-01 14:18:28 +02:00
Vitalii Elenhaupt 6a81a648e3
AST Util 2017-11-01 13:13:44 +02:00
Vitalii Elenhaupt dcc0be892a
Load list of rules dynamically 2017-11-01 12:49:03 +02:00
Vitalii Elenhaupt 1822b2b0a2
Fix line rule failure 2017-11-01 12:23:12 +02:00
Vitalii Elenhaupt 6f5d7f0478
New rule: a literal in the condition 2017-11-01 12:22:37 +02:00
Vitalii Elenhaupt 2eef485501
AST traverse 2017-11-01 01:06:47 +02:00
Vitalii Elenhaupt f1e462cc86
Remove dsl & refactor ast visitors
closes #4
2017-11-01 00:50:22 +02:00
Vitalii Elenhaupt 6cef83f9a9
Correct doc syntax 2017-10-31 23:31:56 +02:00
Vitalii Elenhaupt 6d9f1c67ed
New rule: comparison to boolean 2017-10-31 23:30:22 +02:00
Vitalii Elenhaupt 11005930f6
New rule: UnlessElse 2017-10-31 22:24:02 +02:00
Vitalii Elenhaupt 93dd7d446f
AST parsing
closes #2
2017-10-31 20:29:30 +02:00
Vitalii Elenhaupt b8eeac469a
New rule: trailing blank lines 2017-10-31 17:50:05 +02:00
Vitalii Elenhaupt c8dcddea22
Rule dsl 2017-10-30 23:26:47 +02:00
Vitalii Elenhaupt 7d3d0902e5
New rule: trailing whitespace 2017-10-30 22:35:11 +02:00
Vitalii Elenhaupt 9bba850a9b
Docs & tests 2017-10-30 22:00:01 +02:00
Vitalii Elenhaupt 5e10113055
It works 2017-10-27 00:07:43 +03:00
Vitalii Elenhaupt ffd44dc77b
Simple reporter 2017-10-26 22:45:48 +03:00
Vitalii Elenhaupt 4e84ac871a
New rule: Line Length 2017-10-26 21:47:35 +03:00
Vitalii Elenhaupt eb367c682e
Hello, Ameba 2017-10-26 19:46:58 +03:00