gazelle_styleguide 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +51 -0
- data/Rakefile +6 -0
- data/bin/gazelle_styleguide +4 -0
- data/config/checkstyle.properties +0 -0
- data/config/coffeelint.json +114 -0
- data/config/jshintrc.json +86 -0
- data/config/rubocop.yml +315 -0
- data/config/sun_checks.xml +177 -0
- data/gazelle_styleguide.gemspec +29 -0
- data/lib/gazelle_styleguide/cli.rb +56 -0
- data/lib/gazelle_styleguide/support/checkstyle-5.7-all.jar +0 -0
- data/lib/gazelle_styleguide/version.rb +6 -0
- data/lib/gazelle_styleguide.rb +23 -0
- data/lib/plugins/pre_commit/checks/checkstyle.rb +36 -0
- data/lib/plugins/pre_commit/checks/coffee_lint.rb +25 -0
- data/lib/plugins/pre_commit/checks/env.rb +24 -0
- data/lib/plugins/pre_commit/checks/json.rb +30 -0
- data/lib/plugins/pre_commit/checks/scss_lint.rb +33 -0
- data/lib/plugins/pre_commit/checks/yaml.rb +30 -0
- data/spec/gazelle_styleguide_spec.rb +12 -0
- data/spec/spec_helper.rb +3 -0
- metadata +188 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Allen Madsen
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# GazelleStyleguide
|
2
|
+
|
3
|
+
This gem bundles up Gazelle's style guides for Ruby, JavaScript, CoffeeScript, SCSS, CSS, JSON, and YAML.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'gazelle_styleguide'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install gazelle_styleguide
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
To install the pre-commit hook, run:
|
22
|
+
|
23
|
+
``` bash
|
24
|
+
gazelle_styleguide init
|
25
|
+
```
|
26
|
+
|
27
|
+
To lint all new and changed files, run:
|
28
|
+
|
29
|
+
``` bash
|
30
|
+
gazelle_styleguide lint
|
31
|
+
```
|
32
|
+
|
33
|
+
To lint all files, run:
|
34
|
+
|
35
|
+
``` bash
|
36
|
+
gazelle_styleguide lint -a
|
37
|
+
```
|
38
|
+
|
39
|
+
To lint specific files, run:
|
40
|
+
|
41
|
+
``` bash
|
42
|
+
gazelle_styleguide lint FILES
|
43
|
+
```
|
44
|
+
|
45
|
+
## Contributing
|
46
|
+
|
47
|
+
1. Fork it ( http://github.com/secondrotation/gazelle_styleguide/fork )
|
48
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
49
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
50
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
51
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
File without changes
|
@@ -0,0 +1,114 @@
|
|
1
|
+
{
|
2
|
+
"coffeescript_error": {
|
3
|
+
"level": "error"
|
4
|
+
},
|
5
|
+
"arrow_spacing": {
|
6
|
+
"name": "arrow_spacing",
|
7
|
+
"level": "ignore"
|
8
|
+
},
|
9
|
+
"no_tabs": {
|
10
|
+
"name": "no_tabs",
|
11
|
+
"level": "error"
|
12
|
+
},
|
13
|
+
"no_trailing_whitespace": {
|
14
|
+
"name": "no_trailing_whitespace",
|
15
|
+
"level": "error",
|
16
|
+
"allowed_in_comments": false,
|
17
|
+
"allowed_in_empty_lines": false
|
18
|
+
},
|
19
|
+
"max_line_length": {
|
20
|
+
"name": "max_line_length",
|
21
|
+
"value": 120,
|
22
|
+
"level": "error",
|
23
|
+
"limitComments": true
|
24
|
+
},
|
25
|
+
"line_endings": {
|
26
|
+
"name": "line_endings",
|
27
|
+
"level": "error",
|
28
|
+
"value": "unix"
|
29
|
+
},
|
30
|
+
"no_trailing_semicolons": {
|
31
|
+
"name": "no_trailing_semicolons",
|
32
|
+
"level": "error"
|
33
|
+
},
|
34
|
+
"indentation": {
|
35
|
+
"name": "indentation",
|
36
|
+
"value": 2,
|
37
|
+
"level": "error"
|
38
|
+
},
|
39
|
+
"camel_case_classes": {
|
40
|
+
"name": "camel_case_classes",
|
41
|
+
"level": "error"
|
42
|
+
},
|
43
|
+
"colon_assignment_spacing": {
|
44
|
+
"name": "colon_assignment_spacing",
|
45
|
+
"level": "error",
|
46
|
+
"spacing": {
|
47
|
+
"left": 0,
|
48
|
+
"right": 1
|
49
|
+
}
|
50
|
+
},
|
51
|
+
"no_implicit_braces": {
|
52
|
+
"name": "no_implicit_braces",
|
53
|
+
"level": "ignore",
|
54
|
+
"strict": true
|
55
|
+
},
|
56
|
+
"no_plusplus": {
|
57
|
+
"name": "no_plusplus",
|
58
|
+
"level": "ignore"
|
59
|
+
},
|
60
|
+
"no_throwing_strings": {
|
61
|
+
"name": "no_throwing_strings",
|
62
|
+
"level": "error"
|
63
|
+
},
|
64
|
+
"no_backticks": {
|
65
|
+
"name": "no_backticks",
|
66
|
+
"level": "error"
|
67
|
+
},
|
68
|
+
"no_implicit_parens": {
|
69
|
+
"name": "no_implicit_parens",
|
70
|
+
"level": "error"
|
71
|
+
},
|
72
|
+
"no_empty_param_list": {
|
73
|
+
"name": "no_empty_param_list",
|
74
|
+
"level": "error"
|
75
|
+
},
|
76
|
+
"no_stand_alone_at": {
|
77
|
+
"name": "no_stand_alone_at",
|
78
|
+
"level": "ignore"
|
79
|
+
},
|
80
|
+
"space_operators": {
|
81
|
+
"name": "space_operators",
|
82
|
+
"level": "error"
|
83
|
+
},
|
84
|
+
"duplicate_key": {
|
85
|
+
"name": "duplicate_key",
|
86
|
+
"level": "error"
|
87
|
+
},
|
88
|
+
"empty_constructor_needs_parens": {
|
89
|
+
"name": "empty_constructor_needs_parens",
|
90
|
+
"level": "ignore"
|
91
|
+
},
|
92
|
+
"cyclomatic_complexity": {
|
93
|
+
"name": "cyclomatic_complexity",
|
94
|
+
"value": 6,
|
95
|
+
"level": "error"
|
96
|
+
},
|
97
|
+
"newlines_after_classes": {
|
98
|
+
"name": "newlines_after_classes",
|
99
|
+
"value": 2,
|
100
|
+
"level": "error"
|
101
|
+
},
|
102
|
+
"no_unnecessary_fat_arrows": {
|
103
|
+
"name": "no_unnecessary_fat_arrows",
|
104
|
+
"level": "warn"
|
105
|
+
},
|
106
|
+
"missing_fat_arrows": {
|
107
|
+
"name": "missing_fat_arrows",
|
108
|
+
"level": "ignore"
|
109
|
+
},
|
110
|
+
"non_empty_constructor_needs_parens": {
|
111
|
+
"name": "non_empty_constructor_needs_parens",
|
112
|
+
"level": "error"
|
113
|
+
}
|
114
|
+
}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
{
|
2
|
+
// JSHint Default Configuration File (as on JSHint website)
|
3
|
+
// See http://jshint.com/docs/ for more details
|
4
|
+
|
5
|
+
"maxerr" : 50, // {int} Maximum error before stopping
|
6
|
+
|
7
|
+
// Enforcing
|
8
|
+
"bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
|
9
|
+
"camelcase" : true, // true: Identifiers must be in camelCase
|
10
|
+
"curly" : true, // true: Require {} for every new block or scope
|
11
|
+
"eqeqeq" : true, // true: Require triple equals (===) for comparison
|
12
|
+
"forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty()
|
13
|
+
"immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
|
14
|
+
"indent" : 2, // {int} Number of spaces to use for indentation
|
15
|
+
"latedef" : true, // true: Require variables/functions to be defined before being used
|
16
|
+
"newcap" : true, // true: Require capitalization of all constructor functions e.g. `new F()`
|
17
|
+
"noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
|
18
|
+
"noempty" : true, // true: Prohibit use of empty blocks
|
19
|
+
"nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment)
|
20
|
+
"plusplus" : false, // true: Prohibit use of `++` & `--`
|
21
|
+
"quotmark" : false, // Quotation mark consistency:
|
22
|
+
// false : do nothing (default)
|
23
|
+
// true : ensure whatever is used is consistent
|
24
|
+
// "single" : require single quotes
|
25
|
+
// "double" : require double quotes
|
26
|
+
"undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
|
27
|
+
"unused" : true, // true: Require all defined variables be used
|
28
|
+
"strict" : true, // true: Requires all functions run in ES5 Strict Mode
|
29
|
+
"trailing" : true, // true: Prohibit trailing whitespaces
|
30
|
+
"maxparams" : false, // {int} Max number of formal params allowed per function
|
31
|
+
"maxdepth" : 3, // {int} Max depth of nested blocks (within functions)
|
32
|
+
"maxstatements" : 20, // {int} Max number statements per function
|
33
|
+
"maxcomplexity" : 6, // {int} Max cyclomatic complexity per function
|
34
|
+
"maxlen" : 120, // {int} Max number of characters per line
|
35
|
+
|
36
|
+
// Relaxing
|
37
|
+
"asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
|
38
|
+
"boss" : false, // true: Tolerate assignments where comparisons would be expected
|
39
|
+
"debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
|
40
|
+
"eqnull" : false, // true: Tolerate use of `== null`
|
41
|
+
"es5" : false, // true: Allow ES5 syntax (ex: getters and setters)
|
42
|
+
"esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`)
|
43
|
+
"moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
|
44
|
+
// (ex: `for each`, multiple try/catch, function expression…)
|
45
|
+
"evil" : false, // true: Tolerate use of `eval` and `new Function()`
|
46
|
+
"expr" : false, // true: Tolerate `ExpressionStatement` as Programs
|
47
|
+
"funcscope" : false, // true: Tolerate defining variables inside control statements"
|
48
|
+
"globalstrict" : false, // true: Allow global "use strict" (also enables 'strict')
|
49
|
+
"iterator" : false, // true: Tolerate using the `__iterator__` property
|
50
|
+
"lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
|
51
|
+
"laxbreak" : false, // true: Tolerate possibly unsafe line breakings
|
52
|
+
"laxcomma" : false, // true: Tolerate comma-first style coding
|
53
|
+
"loopfunc" : false, // true: Tolerate functions being defined in loops
|
54
|
+
"multistr" : false, // true: Tolerate multi-line strings
|
55
|
+
"proto" : false, // true: Tolerate using the `__proto__` property
|
56
|
+
"scripturl" : false, // true: Tolerate script-targeted URLs
|
57
|
+
"smarttabs" : false, // true: Tolerate mixed tabs/spaces when used for alignment
|
58
|
+
"shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
|
59
|
+
"sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
|
60
|
+
"supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
|
61
|
+
"validthis" : false, // true: Tolerate using this in a non-constructor function
|
62
|
+
|
63
|
+
// Environments
|
64
|
+
"browser" : true, // Web Browser (window, document, etc)
|
65
|
+
"couch" : false, // CouchDB
|
66
|
+
"devel" : true, // Development/debugging (alert, confirm, etc)
|
67
|
+
"dojo" : false, // Dojo Toolkit
|
68
|
+
"jquery" : true, // jQuery
|
69
|
+
"mootools" : false, // MooTools
|
70
|
+
"node" : false, // Node.js
|
71
|
+
"nonstandard" : true, // Widely adopted globals (escape, unescape, etc)
|
72
|
+
"prototypejs" : false, // Prototype and Scriptaculous
|
73
|
+
"rhino" : false, // Rhino
|
74
|
+
"worker" : false, // Web Workers
|
75
|
+
"wsh" : false, // Windows Scripting Host
|
76
|
+
"yui" : false, // Yahoo User Interface
|
77
|
+
|
78
|
+
// Legacy
|
79
|
+
"nomen" : false, // true: Prohibit dangling `_` in variables
|
80
|
+
"onevar" : false, // true: Allow only one `var` statement per function
|
81
|
+
"passfail" : false, // true: Stop on first error
|
82
|
+
"white" : false, // true: Check against strict whitespace and indentation rules
|
83
|
+
|
84
|
+
// Custom Globals
|
85
|
+
"globals" : {} // additional predefined global variables
|
86
|
+
}
|
data/config/rubocop.yml
ADDED
@@ -0,0 +1,315 @@
|
|
1
|
+
# This is the default configuration file. Enabling and disabling is configured
|
2
|
+
# in separate files. This file adds all other parameters apart from Enabled.
|
3
|
+
|
4
|
+
inherit_from:
|
5
|
+
# - enabled.yml
|
6
|
+
# - disabled.yml
|
7
|
+
|
8
|
+
# Common configuration.
|
9
|
+
AllCops:
|
10
|
+
# Include gemspec and Rakefile
|
11
|
+
Includes:
|
12
|
+
- '**/*.gemspec'
|
13
|
+
- '**/Rakefile'
|
14
|
+
- '**/*.rake'
|
15
|
+
- '**/Gemfile'
|
16
|
+
Excludes: []
|
17
|
+
# By default, the rails cops are not run. Override in project or home
|
18
|
+
# directory .rubocop.yml files, or by giving the -R/--rails option.
|
19
|
+
RunRailsCops: true
|
20
|
+
|
21
|
+
# Indent private/protected/public as deep as method definitions
|
22
|
+
AccessModifierIndentation:
|
23
|
+
EnforcedStyle: outdent
|
24
|
+
SupportedStyles:
|
25
|
+
- outdent
|
26
|
+
- indent
|
27
|
+
|
28
|
+
# Align the elements of a hash literal if they span more than one line.
|
29
|
+
AlignHash:
|
30
|
+
# Alignment of entries using hash rocket as separator. Valid values are:
|
31
|
+
#
|
32
|
+
# key - left alignment of keys
|
33
|
+
# 'a' => 2
|
34
|
+
# 'bb' => 3
|
35
|
+
# separator - alignment of hash rockets, keys are right aligned
|
36
|
+
# 'a' => 2
|
37
|
+
# 'bb' => 3
|
38
|
+
# table - left alignment of keys, hash rockets, and values
|
39
|
+
# 'a' => 2
|
40
|
+
# 'bb' => 3
|
41
|
+
EnforcedHashRocketStyle: key
|
42
|
+
# Alignment of entries using colon as separator. Valid values are:
|
43
|
+
#
|
44
|
+
# key - left alignment of keys
|
45
|
+
# a: 0
|
46
|
+
# bb: 1
|
47
|
+
# separator - alignment of colons, keys are right aligned
|
48
|
+
# a: 0
|
49
|
+
# bb: 1
|
50
|
+
# table - left alignment of keys and values
|
51
|
+
# a: 0
|
52
|
+
# bb: 1
|
53
|
+
EnforcedColonStyle: key
|
54
|
+
|
55
|
+
# Allow safe assignment in conditions.
|
56
|
+
AssignmentInCondition:
|
57
|
+
AllowSafeAssignment: true
|
58
|
+
|
59
|
+
BlockNesting:
|
60
|
+
Max: 3
|
61
|
+
|
62
|
+
BracesAroundHashParameters:
|
63
|
+
EnforcedStyle: no_braces
|
64
|
+
SupportedStyles:
|
65
|
+
- braces
|
66
|
+
- no_braces
|
67
|
+
|
68
|
+
# Indentation of `when`.
|
69
|
+
CaseIndentation:
|
70
|
+
IndentWhenRelativeTo: case
|
71
|
+
SupportedStyles:
|
72
|
+
- case
|
73
|
+
- end
|
74
|
+
IndentOneStep: false
|
75
|
+
|
76
|
+
ClassLength:
|
77
|
+
CountComments: false # count full line comments?
|
78
|
+
Max: 200
|
79
|
+
|
80
|
+
# Align with the style guide.
|
81
|
+
CollectionMethods:
|
82
|
+
PreferredMethods:
|
83
|
+
collect: 'map'
|
84
|
+
collect!: 'map!'
|
85
|
+
inject: 'reduce'
|
86
|
+
detect: 'find'
|
87
|
+
find_all: 'select'
|
88
|
+
|
89
|
+
# Checks formatting of special comments
|
90
|
+
CommentAnnotation:
|
91
|
+
Keywords:
|
92
|
+
- TODO
|
93
|
+
- FIXME
|
94
|
+
- OPTIMIZE
|
95
|
+
- HACK
|
96
|
+
- REVIEW
|
97
|
+
|
98
|
+
# Avoid complex methods.
|
99
|
+
CyclomaticComplexity:
|
100
|
+
Max: 6
|
101
|
+
|
102
|
+
Documentation:
|
103
|
+
Enabled: true
|
104
|
+
|
105
|
+
# Multi-line method chaining should be done with leading dots.
|
106
|
+
DotPosition:
|
107
|
+
Style: leading
|
108
|
+
SupportedStyles:
|
109
|
+
- leading
|
110
|
+
- trailing
|
111
|
+
|
112
|
+
# Use empty lines between defs.
|
113
|
+
EmptyLineBetweenDefs:
|
114
|
+
# If true, this parameter means that single line method definitions don't
|
115
|
+
# need an empty line between them.
|
116
|
+
AllowAdjacentOneLineDefs: false
|
117
|
+
|
118
|
+
Encoding:
|
119
|
+
Enabled: true
|
120
|
+
|
121
|
+
# Align ends correctly.
|
122
|
+
EndAlignment:
|
123
|
+
# The value `keyword` means that `end` should be aligned with the matching
|
124
|
+
# keyword (if, while, etc.).
|
125
|
+
# The value `variable` means that in assignments, `end` should be aligned
|
126
|
+
# with the start of the variable on the left hand side of `=`. In all other
|
127
|
+
# situations, `end` should still be aligned with the keyword.
|
128
|
+
AlignWith: variable
|
129
|
+
SupportedStyles:
|
130
|
+
- keyword
|
131
|
+
- variable
|
132
|
+
|
133
|
+
# Checks use of for or each in multiline loops.
|
134
|
+
For:
|
135
|
+
EnforcedStyle: each
|
136
|
+
SupportedStyles:
|
137
|
+
- for
|
138
|
+
- each
|
139
|
+
|
140
|
+
# Built-in global variables are allowed by default.
|
141
|
+
GlobalVars:
|
142
|
+
AllowedVariables: ['$1', '$2', '$3', '$4', '$5', '$6']
|
143
|
+
|
144
|
+
HashSyntax:
|
145
|
+
EnforcedStyle: ruby19
|
146
|
+
SupportedStyles:
|
147
|
+
- ruby19
|
148
|
+
- hash_rockets
|
149
|
+
|
150
|
+
LambdaCall:
|
151
|
+
EnforcedStyle: call
|
152
|
+
SupportedStyles:
|
153
|
+
- call
|
154
|
+
- braces
|
155
|
+
|
156
|
+
LineLength:
|
157
|
+
Max: 120
|
158
|
+
|
159
|
+
MethodDefParentheses:
|
160
|
+
EnforcedStyle: require_parentheses
|
161
|
+
SupportedStyles:
|
162
|
+
- require_parentheses
|
163
|
+
- require_no_parentheses
|
164
|
+
|
165
|
+
MethodLength:
|
166
|
+
CountComments: false # count full line comments?
|
167
|
+
Max: 20
|
168
|
+
|
169
|
+
MethodName:
|
170
|
+
EnforcedStyle: snake_case
|
171
|
+
SupportedStyles:
|
172
|
+
- snake_case
|
173
|
+
- camelCase
|
174
|
+
|
175
|
+
NumericLiterals:
|
176
|
+
MinDigits: 10
|
177
|
+
|
178
|
+
Output:
|
179
|
+
Ignore:
|
180
|
+
- '^.*\.rake$'
|
181
|
+
- '^.*/script/.*$'
|
182
|
+
- '^.*/tasks/.*$'
|
183
|
+
- 'Rakefile$'
|
184
|
+
|
185
|
+
ParameterLists:
|
186
|
+
Max: 5
|
187
|
+
CountKeywordArgs: true
|
188
|
+
|
189
|
+
# Allow safe assignment in conditions.
|
190
|
+
ParenthesesAroundCondition:
|
191
|
+
AllowSafeAssignment: true
|
192
|
+
|
193
|
+
PredicateName:
|
194
|
+
NamePrefixBlacklist:
|
195
|
+
- is_
|
196
|
+
- has_
|
197
|
+
- have_
|
198
|
+
|
199
|
+
RaiseArgs:
|
200
|
+
EnforcedStyle: exploded
|
201
|
+
SupportedStyles:
|
202
|
+
- compact # raise Exception.new(msg)
|
203
|
+
- exploded # raise Exception, msg
|
204
|
+
|
205
|
+
|
206
|
+
RedundantReturn:
|
207
|
+
# When true allows code like `return x, y`.
|
208
|
+
AllowMultipleReturnValues: false
|
209
|
+
|
210
|
+
RegexpLiteral:
|
211
|
+
MaxSlashes: 1
|
212
|
+
|
213
|
+
Semicolon:
|
214
|
+
# Allow ; to separate several expressions on the same line.
|
215
|
+
AllowAsExpressionSeparator: false
|
216
|
+
|
217
|
+
SignalException:
|
218
|
+
EnforcedStyle: only_raise
|
219
|
+
SupportedStyles:
|
220
|
+
- only_raise
|
221
|
+
- only_fail
|
222
|
+
- semantic
|
223
|
+
|
224
|
+
|
225
|
+
SingleLineBlockParams:
|
226
|
+
Methods:
|
227
|
+
- reduce:
|
228
|
+
- a
|
229
|
+
- e
|
230
|
+
- inject:
|
231
|
+
- a
|
232
|
+
- e
|
233
|
+
|
234
|
+
SingleLineMethods:
|
235
|
+
AllowIfMethodIsEmpty: true
|
236
|
+
|
237
|
+
StringLiterals:
|
238
|
+
EnforcedStyle: single_quotes
|
239
|
+
SupportedStyles:
|
240
|
+
- single_quotes
|
241
|
+
- double_quotes
|
242
|
+
|
243
|
+
SpaceAroundBlockBraces:
|
244
|
+
EnforcedStyle: no_space_inside_braces
|
245
|
+
SupportedStyles:
|
246
|
+
- space_inside_braces
|
247
|
+
- no_space_inside_braces
|
248
|
+
# Valid values are: space, no_space
|
249
|
+
EnforcedStyleForEmptyBraces: no_space
|
250
|
+
# Space between { and |. Overrides EnforcedStyle if there is a conflict.
|
251
|
+
SpaceBeforeBlockParameters: false
|
252
|
+
|
253
|
+
SpaceInsideHashLiteralBraces:
|
254
|
+
EnforcedStyle: no_space
|
255
|
+
EnforcedStyleForEmptyBraces: no_space
|
256
|
+
SupportedStyles:
|
257
|
+
- space
|
258
|
+
- no_space
|
259
|
+
|
260
|
+
TrailingComma:
|
261
|
+
EnforcedStyleForMultiline: no_comma
|
262
|
+
SupportedStyles:
|
263
|
+
- comma
|
264
|
+
- no_comma
|
265
|
+
|
266
|
+
# TrivialAccessors doesn't require exact name matches and doesn't allow
|
267
|
+
# predicated methods by default.
|
268
|
+
TrivialAccessors:
|
269
|
+
ExactNameMatch: false
|
270
|
+
AllowPredicates: false
|
271
|
+
Whitelist:
|
272
|
+
- to_ary
|
273
|
+
- to_a
|
274
|
+
- to_c
|
275
|
+
- to_enum
|
276
|
+
- to_h
|
277
|
+
- to_hash
|
278
|
+
- to_i
|
279
|
+
- to_int
|
280
|
+
- to_io
|
281
|
+
- to_open
|
282
|
+
- to_path
|
283
|
+
- to_proc
|
284
|
+
- to_r
|
285
|
+
- to_regexp
|
286
|
+
- to_str
|
287
|
+
- to_s
|
288
|
+
- to_sym
|
289
|
+
|
290
|
+
VariableName:
|
291
|
+
EnforcedStyle: snake_case
|
292
|
+
SupportedStyles:
|
293
|
+
- snake_case
|
294
|
+
- camelCase
|
295
|
+
|
296
|
+
WordArray:
|
297
|
+
MinSize: 0
|
298
|
+
|
299
|
+
##################### Rails ##################################
|
300
|
+
|
301
|
+
DefaultScope:
|
302
|
+
IncludePaths:
|
303
|
+
- app/models
|
304
|
+
|
305
|
+
HasAndBelongsToMany:
|
306
|
+
IncludePaths:
|
307
|
+
- app/models
|
308
|
+
|
309
|
+
ReadAttribute:
|
310
|
+
IncludePaths:
|
311
|
+
- app/models
|
312
|
+
|
313
|
+
Validation:
|
314
|
+
IncludePaths:
|
315
|
+
- app/models
|
@@ -0,0 +1,177 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<!DOCTYPE module PUBLIC
|
3
|
+
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
4
|
+
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
5
|
+
|
6
|
+
<!--
|
7
|
+
|
8
|
+
Checkstyle configuration that checks the sun coding conventions from:
|
9
|
+
|
10
|
+
- the Java Language Specification at
|
11
|
+
http://java.sun.com/docs/books/jls/second_edition/html/index.html
|
12
|
+
|
13
|
+
- the Sun Code Conventions at http://java.sun.com/docs/codeconv/
|
14
|
+
|
15
|
+
- the Javadoc guidelines at
|
16
|
+
http://java.sun.com/j2se/javadoc/writingdoccomments/index.html
|
17
|
+
|
18
|
+
- the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html
|
19
|
+
|
20
|
+
- some best practices
|
21
|
+
|
22
|
+
Checkstyle is very configurable. Be sure to read the documentation at
|
23
|
+
http://checkstyle.sf.net (or in your downloaded distribution).
|
24
|
+
|
25
|
+
Most Checks are configurable, be sure to consult the documentation.
|
26
|
+
|
27
|
+
To completely disable a check, just comment it out or delete it from the file.
|
28
|
+
|
29
|
+
Finally, it is worth reading the documentation.
|
30
|
+
|
31
|
+
-->
|
32
|
+
|
33
|
+
<module name="Checker">
|
34
|
+
<!--
|
35
|
+
If you set the basedir property below, then all reported file
|
36
|
+
names will be relative to the specified directory. See
|
37
|
+
http://checkstyle.sourceforge.net/5.x/config.html#Checker
|
38
|
+
|
39
|
+
<property name="basedir" value="${basedir}"/>
|
40
|
+
-->
|
41
|
+
|
42
|
+
<!-- Checks that a package-info.java file exists for each package. -->
|
43
|
+
<!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->
|
44
|
+
<module name="JavadocPackage"/>
|
45
|
+
|
46
|
+
<!-- Checks whether files end with a new line. -->
|
47
|
+
<!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
|
48
|
+
<module name="NewlineAtEndOfFile"/>
|
49
|
+
|
50
|
+
<!-- Checks that property files contain the same keys. -->
|
51
|
+
<!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
|
52
|
+
<module name="Translation"/>
|
53
|
+
|
54
|
+
<!-- Checks for Size Violations. -->
|
55
|
+
<!-- See http://checkstyle.sf.net/config_sizes.html -->
|
56
|
+
<module name="FileLength"/>
|
57
|
+
|
58
|
+
<!-- Checks for whitespace -->
|
59
|
+
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
|
60
|
+
<module name="FileTabCharacter"/>
|
61
|
+
|
62
|
+
<!-- Miscellaneous other checks. -->
|
63
|
+
<!-- See http://checkstyle.sf.net/config_misc.html -->
|
64
|
+
<module name="RegexpSingleline">
|
65
|
+
<property name="format" value="\s+$"/>
|
66
|
+
<property name="minimum" value="0"/>
|
67
|
+
<property name="maximum" value="0"/>
|
68
|
+
<property name="message" value="Line has trailing spaces."/>
|
69
|
+
</module>
|
70
|
+
|
71
|
+
<!-- Checks for Headers -->
|
72
|
+
<!-- See http://checkstyle.sf.net/config_header.html -->
|
73
|
+
<!-- <module name="Header"> -->
|
74
|
+
<!-- <property name="headerFile" value="${checkstyle.header.file}"/> -->
|
75
|
+
<!-- <property name="fileExtensions" value="java"/> -->
|
76
|
+
<!-- </module> -->
|
77
|
+
|
78
|
+
<module name="TreeWalker">
|
79
|
+
|
80
|
+
<!-- Checks for Javadoc comments. -->
|
81
|
+
<!-- See http://checkstyle.sf.net/config_javadoc.html -->
|
82
|
+
<module name="JavadocMethod"/>
|
83
|
+
<module name="JavadocType"/>
|
84
|
+
<module name="JavadocVariable"/>
|
85
|
+
<module name="JavadocStyle"/>
|
86
|
+
|
87
|
+
|
88
|
+
<!-- Checks for Naming Conventions. -->
|
89
|
+
<!-- See http://checkstyle.sf.net/config_naming.html -->
|
90
|
+
<module name="ConstantName"/>
|
91
|
+
<module name="LocalFinalVariableName"/>
|
92
|
+
<module name="LocalVariableName"/>
|
93
|
+
<module name="MemberName"/>
|
94
|
+
<module name="MethodName"/>
|
95
|
+
<module name="PackageName"/>
|
96
|
+
<module name="ParameterName"/>
|
97
|
+
<module name="StaticVariableName"/>
|
98
|
+
<module name="TypeName"/>
|
99
|
+
|
100
|
+
|
101
|
+
<!-- Checks for imports -->
|
102
|
+
<!-- See http://checkstyle.sf.net/config_import.html -->
|
103
|
+
<module name="AvoidStarImport"/>
|
104
|
+
<module name="IllegalImport"/> <!-- defaults to sun.* packages -->
|
105
|
+
<module name="RedundantImport"/>
|
106
|
+
<module name="UnusedImports"/>
|
107
|
+
|
108
|
+
|
109
|
+
<!-- Checks for Size Violations. -->
|
110
|
+
<!-- See http://checkstyle.sf.net/config_sizes.html -->
|
111
|
+
<module name="LineLength"/>
|
112
|
+
<module name="MethodLength"/>
|
113
|
+
<module name="ParameterNumber"/>
|
114
|
+
|
115
|
+
|
116
|
+
<!-- Checks for whitespace -->
|
117
|
+
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
|
118
|
+
<module name="EmptyForIteratorPad"/>
|
119
|
+
<module name="GenericWhitespace"/>
|
120
|
+
<module name="MethodParamPad"/>
|
121
|
+
<module name="NoWhitespaceAfter"/>
|
122
|
+
<module name="NoWhitespaceBefore"/>
|
123
|
+
<module name="OperatorWrap"/>
|
124
|
+
<module name="ParenPad"/>
|
125
|
+
<module name="TypecastParenPad"/>
|
126
|
+
<module name="WhitespaceAfter"/>
|
127
|
+
<module name="WhitespaceAround"/>
|
128
|
+
|
129
|
+
|
130
|
+
<!-- Modifier Checks -->
|
131
|
+
<!-- See http://checkstyle.sf.net/config_modifiers.html -->
|
132
|
+
<module name="ModifierOrder"/>
|
133
|
+
<module name="RedundantModifier"/>
|
134
|
+
|
135
|
+
|
136
|
+
<!-- Checks for blocks. You know, those {}'s -->
|
137
|
+
<!-- See http://checkstyle.sf.net/config_blocks.html -->
|
138
|
+
<module name="AvoidNestedBlocks"/>
|
139
|
+
<module name="EmptyBlock"/>
|
140
|
+
<module name="LeftCurly"/>
|
141
|
+
<module name="NeedBraces"/>
|
142
|
+
<module name="RightCurly"/>
|
143
|
+
|
144
|
+
|
145
|
+
<!-- Checks for common coding problems -->
|
146
|
+
<!-- See http://checkstyle.sf.net/config_coding.html -->
|
147
|
+
<module name="AvoidInlineConditionals"/>
|
148
|
+
<module name="EmptyStatement"/>
|
149
|
+
<module name="EqualsHashCode"/>
|
150
|
+
<module name="HiddenField"/>
|
151
|
+
<module name="IllegalInstantiation"/>
|
152
|
+
<module name="InnerAssignment"/>
|
153
|
+
<module name="MagicNumber"/>
|
154
|
+
<module name="MissingSwitchDefault"/>
|
155
|
+
<module name="RedundantThrows"/>
|
156
|
+
<module name="SimplifyBooleanExpression"/>
|
157
|
+
<module name="SimplifyBooleanReturn"/>
|
158
|
+
|
159
|
+
<!-- Checks for class design -->
|
160
|
+
<!-- See http://checkstyle.sf.net/config_design.html -->
|
161
|
+
<module name="DesignForExtension"/>
|
162
|
+
<module name="FinalClass"/>
|
163
|
+
<module name="HideUtilityClassConstructor"/>
|
164
|
+
<module name="InterfaceIsType"/>
|
165
|
+
<module name="VisibilityModifier"/>
|
166
|
+
|
167
|
+
|
168
|
+
<!-- Miscellaneous other checks. -->
|
169
|
+
<!-- See http://checkstyle.sf.net/config_misc.html -->
|
170
|
+
<module name="ArrayTypeStyle"/>
|
171
|
+
<module name="FinalParameters"/>
|
172
|
+
<module name="TodoComment"/>
|
173
|
+
<module name="UpperEll"/>
|
174
|
+
|
175
|
+
</module>
|
176
|
+
|
177
|
+
</module>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gazelle_styleguide/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "gazelle_styleguide"
|
8
|
+
spec.version = GazelleStyleguide::VERSION
|
9
|
+
spec.authors = ["Allen Madsen"]
|
10
|
+
spec.email = ["blatyo@gmail.com"]
|
11
|
+
spec.summary = %q{Gazelle's coding style guidelines and checks}
|
12
|
+
spec.description = %q{Gazelle's coding style guidelines and checks}
|
13
|
+
spec.homepage = "https://github.com/secondrotation/gazelle_styleguide"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_runtime_dependency 'pre-commit'
|
22
|
+
spec.add_runtime_dependency 'rubocop'
|
23
|
+
spec.add_runtime_dependency 'execjs'
|
24
|
+
spec.add_runtime_dependency 'grit'
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
27
|
+
spec.add_development_dependency "rake"
|
28
|
+
spec.add_development_dependency "rspec"
|
29
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'grit'
|
3
|
+
require 'thor'
|
4
|
+
|
5
|
+
module GazelleStyleguide
|
6
|
+
# Command line tool for managing linter running and pre-commits
|
7
|
+
class CLI < Thor
|
8
|
+
CHECKS = 'env, jshint, rspec_focus, merge_conflict, rubocop, coffee_lint, json, yaml, scss_lint, checkstyle'
|
9
|
+
|
10
|
+
desc 'init', 'Sets up pre-commit hooks to check style.'
|
11
|
+
def init
|
12
|
+
install_pre_commit
|
13
|
+
setup_git_config
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'lint [flags|FILES]', 'Runs linters'
|
17
|
+
option :all, aliases: :a
|
18
|
+
option :changed, aliases: :c
|
19
|
+
def lint(*files)
|
20
|
+
files = lint_files(files, options)
|
21
|
+
|
22
|
+
PreCommit::Runner.new($stderr, files).run
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def install_pre_commit
|
28
|
+
require 'pre-commit/installer'
|
29
|
+
|
30
|
+
PreCommit::Installer.new.install
|
31
|
+
end
|
32
|
+
|
33
|
+
def setup_git_config
|
34
|
+
repo.config['pre-commit.checks'] = CHECKS
|
35
|
+
repo.config['pre-commit.rubocop.config'] = GazelleStyleguide.config_for('rubocop.yml')
|
36
|
+
end
|
37
|
+
|
38
|
+
def lint_files(files, options)
|
39
|
+
if files.any?
|
40
|
+
files
|
41
|
+
elsif options[:all]
|
42
|
+
Dir['./**/*'].select {|f| File.file?(f)}
|
43
|
+
else
|
44
|
+
changed_files
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def changed_files
|
49
|
+
repo.status.files.select {|file, status| status.type == 'M' || status.untracked}.keys
|
50
|
+
end
|
51
|
+
|
52
|
+
def repo
|
53
|
+
@repo ||= Grit::Repo.new('.')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
Binary file
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'pre-commit'
|
3
|
+
require 'rubocop'
|
4
|
+
require 'execjs'
|
5
|
+
|
6
|
+
require 'plugins/pre_commit/checks/checkstyle'
|
7
|
+
require 'plugins/pre_commit/checks/coffee_lint'
|
8
|
+
require 'plugins/pre_commit/checks/env'
|
9
|
+
require 'plugins/pre_commit/checks/json'
|
10
|
+
require 'plugins/pre_commit/checks/scss_lint'
|
11
|
+
require 'plugins/pre_commit/checks/yaml'
|
12
|
+
|
13
|
+
require 'gazelle_styleguide/version'
|
14
|
+
require 'gazelle_styleguide/cli'
|
15
|
+
|
16
|
+
# This module namespaces Gazelle's style guide. Manages configuration for various linters.
|
17
|
+
module GazelleStyleguide
|
18
|
+
class << self
|
19
|
+
def config_for(config_file)
|
20
|
+
File.expand_path("../../config/#{config_file}", __FILE__)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'open3'
|
3
|
+
require 'pre-commit/checks/plugin'
|
4
|
+
|
5
|
+
module PreCommit
|
6
|
+
module Checks
|
7
|
+
# Runs checkstyle against java files
|
8
|
+
class Checkstyle < Plugin
|
9
|
+
def call(staged_files)
|
10
|
+
staged_files = staged_files.grep(/\.java$/)
|
11
|
+
return if staged_files.empty?
|
12
|
+
|
13
|
+
args = (jar_flag + config_file_flag + checks_file_flag + staged_files).join(' ')
|
14
|
+
puts "java #{args}"
|
15
|
+
stdout, stderr, result = Open3.capture3("java #{args}")
|
16
|
+
stdout + stderr unless result.success?
|
17
|
+
end
|
18
|
+
|
19
|
+
def jar_flag
|
20
|
+
['-jar', File.expand_path('../../../../gazelle_styleguide/support/checkstyle-5.7-all.jar', __FILE__)]
|
21
|
+
end
|
22
|
+
|
23
|
+
def config_file_flag
|
24
|
+
ENV['CHECKSTYLE_CONFIG'] ? ['-p', ENV['CHECKSTYLE_CONFIG']] : []
|
25
|
+
end
|
26
|
+
|
27
|
+
def checks_file_flag
|
28
|
+
ENV['CHECKSTYLE_CHECKS'] ? ['-c', ENV['CHECKSTYLE_CHECKS']] : []
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.description
|
32
|
+
'Runs coffeelint to detect errors'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'open3'
|
3
|
+
require 'pre-commit/checks/plugin'
|
4
|
+
|
5
|
+
module PreCommit
|
6
|
+
module Checks
|
7
|
+
# Runs coffeelint against coffeescript files
|
8
|
+
class CoffeeLint < Plugin
|
9
|
+
def call(staged_files)
|
10
|
+
staged_files = staged_files.grep(/\.coffee$/)
|
11
|
+
return if staged_files.empty?
|
12
|
+
|
13
|
+
config_flag = ENV['COFFEELINT_CONFIG'] ? "-f #{ENV['COFFEELINT_CONFIG']}" : ''
|
14
|
+
args = staged_files.join(' ')
|
15
|
+
|
16
|
+
stdout, stderr, result = Open3.capture3("coffeelint #{config_flag} #{args}")
|
17
|
+
stdout + stderr unless result.success?
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.description
|
21
|
+
'Runs coffeelint to detect errors'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'gazelle_styleguide'
|
3
|
+
require 'pre-commit/checks/plugin'
|
4
|
+
|
5
|
+
module PreCommit
|
6
|
+
module Checks
|
7
|
+
# Loads environment variables for configuration.
|
8
|
+
class Env < Plugin
|
9
|
+
def call(staged_files)
|
10
|
+
ENV['JSHINT_CONFIG'] = GazelleStyleguide.config_for('jshintrc.json')
|
11
|
+
ENV['COFFEELINT_CONFIG'] = GazelleStyleguide.config_for('coffeelint.json')
|
12
|
+
ENV['RUBOCOP_CONFIG'] = GazelleStyleguide.config_for('rubocop.yml')
|
13
|
+
ENV['CHECKSTYLE_CONFIG'] = GazelleStyleguide.config_for('checkstyle.properties')
|
14
|
+
ENV['CHECKSTYLE_CHECKS'] = GazelleStyleguide.config_for('sun_checks.xml')
|
15
|
+
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.description
|
20
|
+
'Load environment variables for linter configuration.'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'json'
|
3
|
+
require 'pre-commit/checks/plugin'
|
4
|
+
|
5
|
+
module PreCommit
|
6
|
+
module Checks
|
7
|
+
# Checks JSON to make sure it's parsable.
|
8
|
+
class Json < Plugin
|
9
|
+
def call(staged_files)
|
10
|
+
staged_files = staged_files.grep(/\.json$/)
|
11
|
+
return if staged_files.empty?
|
12
|
+
|
13
|
+
errors = staged_files.map {|file| load_file(file)}.compact
|
14
|
+
|
15
|
+
errors.join("\n") unless errors.empty?
|
16
|
+
end
|
17
|
+
|
18
|
+
def load_file(file)
|
19
|
+
File.open(file) {|io| JSON.load(io)}
|
20
|
+
nil
|
21
|
+
rescue StandardError => e
|
22
|
+
"#{e.message} parsing #{file}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.description
|
26
|
+
'Runs json to detect errors.'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'open3'
|
3
|
+
require 'pre-commit/checks/plugin'
|
4
|
+
|
5
|
+
module PreCommit
|
6
|
+
module Checks
|
7
|
+
# Lints SCSS files with scss-lint
|
8
|
+
class ScssLint < Plugin
|
9
|
+
def call(staged_files)
|
10
|
+
staged_files = staged_files.grep(/\.coffee$/)
|
11
|
+
return if staged_files.empty?
|
12
|
+
|
13
|
+
args = staged_files.join(' ')
|
14
|
+
command = "scss-lint #{config_flag} #{args}"
|
15
|
+
|
16
|
+
stdout, stderr, result = Open3.capture3(command)
|
17
|
+
stdout + stderr unless result.success?
|
18
|
+
end
|
19
|
+
|
20
|
+
def config_flag
|
21
|
+
if ENV['SCSSLINT_CONFIG']
|
22
|
+
"-c #{ENV['SCSSLINT_CONFIG']}"
|
23
|
+
else
|
24
|
+
''
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.description
|
29
|
+
'Runs scss-lint to detect errors'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'yaml'
|
3
|
+
require 'pre-commit/checks/plugin'
|
4
|
+
|
5
|
+
module PreCommit
|
6
|
+
module Checks
|
7
|
+
# Checks YAML to make sure it's parsable.
|
8
|
+
class Yaml < Plugin
|
9
|
+
def call(staged_files)
|
10
|
+
staged_files = staged_files.grep(/\.(yml|yaml)$/)
|
11
|
+
return if staged_files.empty?
|
12
|
+
|
13
|
+
errors = staged_files.map {|file| load_file(file)}.compact
|
14
|
+
|
15
|
+
errors.join('\n') unless errors.empty?
|
16
|
+
end
|
17
|
+
|
18
|
+
def load_file(file)
|
19
|
+
YAML.load_file(file)
|
20
|
+
nil
|
21
|
+
rescue ArgumentError => e
|
22
|
+
"#{e.message} parsing #{file}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.description
|
26
|
+
'Runs yaml to detect errors.'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe GazelleStyleguide do
|
5
|
+
it 'should have a version number' do
|
6
|
+
expect(GazelleStyleguide::VERSION).not_to be nil
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should do something useful' do
|
10
|
+
expect(false).to be true
|
11
|
+
end
|
12
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,188 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gazelle_styleguide
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Allen Madsen
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-03-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: pre-commit
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rubocop
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: execjs
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: grit
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: bundler
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '1.5'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.5'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rake
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rspec
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: Gazelle's coding style guidelines and checks
|
127
|
+
email:
|
128
|
+
- blatyo@gmail.com
|
129
|
+
executables:
|
130
|
+
- gazelle_styleguide
|
131
|
+
extensions: []
|
132
|
+
extra_rdoc_files: []
|
133
|
+
files:
|
134
|
+
- .gitignore
|
135
|
+
- .rspec
|
136
|
+
- .travis.yml
|
137
|
+
- Gemfile
|
138
|
+
- LICENSE.txt
|
139
|
+
- README.md
|
140
|
+
- Rakefile
|
141
|
+
- bin/gazelle_styleguide
|
142
|
+
- config/checkstyle.properties
|
143
|
+
- config/coffeelint.json
|
144
|
+
- config/jshintrc.json
|
145
|
+
- config/rubocop.yml
|
146
|
+
- config/sun_checks.xml
|
147
|
+
- gazelle_styleguide.gemspec
|
148
|
+
- lib/gazelle_styleguide.rb
|
149
|
+
- lib/gazelle_styleguide/cli.rb
|
150
|
+
- lib/gazelle_styleguide/support/checkstyle-5.7-all.jar
|
151
|
+
- lib/gazelle_styleguide/version.rb
|
152
|
+
- lib/plugins/pre_commit/checks/checkstyle.rb
|
153
|
+
- lib/plugins/pre_commit/checks/coffee_lint.rb
|
154
|
+
- lib/plugins/pre_commit/checks/env.rb
|
155
|
+
- lib/plugins/pre_commit/checks/json.rb
|
156
|
+
- lib/plugins/pre_commit/checks/scss_lint.rb
|
157
|
+
- lib/plugins/pre_commit/checks/yaml.rb
|
158
|
+
- spec/gazelle_styleguide_spec.rb
|
159
|
+
- spec/spec_helper.rb
|
160
|
+
homepage: https://github.com/secondrotation/gazelle_styleguide
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
post_install_message:
|
164
|
+
rdoc_options: []
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
169
|
+
requirements:
|
170
|
+
- - ! '>='
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
none: false
|
175
|
+
requirements:
|
176
|
+
- - ! '>='
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0'
|
179
|
+
requirements: []
|
180
|
+
rubyforge_project:
|
181
|
+
rubygems_version: 1.8.23
|
182
|
+
signing_key:
|
183
|
+
specification_version: 3
|
184
|
+
summary: Gazelle's coding style guidelines and checks
|
185
|
+
test_files:
|
186
|
+
- spec/gazelle_styleguide_spec.rb
|
187
|
+
- spec/spec_helper.rb
|
188
|
+
has_rdoc:
|