chutney 3.12.2 → 3.12.3

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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/chutney.gemspec +3 -3
  3. data/lib/chutney/version.rb +1 -1
  4. data/spec/chutney_mcp_spec.rb +0 -0
  5. data/usechutney.com.site/.gitignore +2 -0
  6. data/usechutney.com.site/site/assets/favicons/android-chrome-192x192.png +0 -0
  7. data/usechutney.com.site/site/assets/favicons/android-chrome-512x512.png +0 -0
  8. data/usechutney.com.site/site/assets/favicons/apple-touch-icon.png +0 -0
  9. data/usechutney.com.site/site/assets/favicons/favicon-16x16.png +0 -0
  10. data/usechutney.com.site/site/assets/favicons/favicon-32x32.png +0 -0
  11. data/usechutney.com.site/site/assets/favicons/favicon.ico +0 -0
  12. data/usechutney.com.site/site/assets/favicons/site.webmanifest +19 -0
  13. data/usechutney.com.site/site/assets/styles.css +298 -0
  14. data/{usechutney.com/pages/about/index.md → usechutney.com.site/site/src/about.page.md} +1 -6
  15. data/{usechutney.com/docs/configuration/index.md → usechutney.com.site/site/src/docs/configuration.page.md} +2 -6
  16. data/{usechutney.com/docs/disabling-rules/index.md → usechutney.com.site/site/src/docs/disabling-rules.page.md} +2 -6
  17. data/usechutney.com.site/site/src/docs/index.page.md +17 -0
  18. data/{usechutney.com/docs/installing/index.md → usechutney.com.site/site/src/docs/installing.page.md} +2 -6
  19. data/{usechutney.com/docs/language-server/index.md → usechutney.com.site/site/src/docs/language-server.page.md} +3 -8
  20. data/{usechutney.com/docs/mcp/index.md → usechutney.com.site/site/src/docs/mcp.page.md} +3 -8
  21. data/{usechutney.com/docs/rules/avoid-colons-at-start-of-names/index.md → usechutney.com.site/site/src/docs/rules/avoid-colons-at-start-of-names.page.md} +2 -6
  22. data/{usechutney.com/docs/rules/avoid-comma-in-tags/index.md → usechutney.com.site/site/src/docs/rules/avoid-comma-in-tags.page.md} +2 -6
  23. data/{usechutney.com/docs/rules/avoid-full-stops/index.md → usechutney.com.site/site/src/docs/rules/avoid-full-stops.page.md} +2 -6
  24. data/{usechutney.com/docs/rules/avoid-outline-for-single-example/index.md → usechutney.com.site/site/src/docs/rules/avoid-outline-for-single-example.page.md} +2 -6
  25. data/{usechutney.com/docs/rules/avoid-scripting/index.md → usechutney.com.site/site/src/docs/rules/avoid-scripting.page.md} +2 -6
  26. data/{usechutney.com/docs/rules/avoid-splat-steps-in-background/index.md → usechutney.com.site/site/src/docs/rules/avoid-splat-steps-in-background.page.md} +2 -6
  27. data/{usechutney.com/docs/rules/avoid-splat-steps-in-scenarios/index.md → usechutney.com.site/site/src/docs/rules/avoid-splat-steps-in-scenarios.page.md} +2 -6
  28. data/{usechutney.com/docs/rules/avoid-typographers-quotes/index.md → usechutney.com.site/site/src/docs/rules/avoid-typographers-quotes.page.md} +2 -6
  29. data/{usechutney.com/docs/rules/background-does-more-than-setup/index.md → usechutney.com.site/site/src/docs/rules/background-does-more-than-setup.page.md} +2 -6
  30. data/{usechutney.com/docs/rules/background-requires-multiple-scenarios/index.md → usechutney.com.site/site/src/docs/rules/background-requires-multiple-scenarios.page.md} +2 -6
  31. data/{usechutney.com/docs/rules/bad-scenario-name/index.md → usechutney.com.site/site/src/docs/rules/bad-scenario-name.page.md} +2 -6
  32. data/usechutney.com.site/site/src/docs/rules/empty-feature-file.page.md +3 -0
  33. data/{usechutney.com/docs/rules/file-name-differs-feature-name/index.md → usechutney.com.site/site/src/docs/rules/file-name-differs-feature-name.page.md} +2 -6
  34. data/{usechutney.com/docs/rules/givens-after-background/index.md → usechutney.com.site/site/src/docs/rules/givens-after-background.page.md} +2 -6
  35. data/{usechutney.com/docs/rules/inconsistent-quoting/index.md → usechutney.com.site/site/src/docs/rules/inconsistent-quoting.page.md} +2 -6
  36. data/usechutney.com.site/site/src/docs/rules/index.page.md +43 -0
  37. data/{usechutney.com/docs/rules/invalid-step-flow/index.md → usechutney.com.site/site/src/docs/rules/invalid-step-flow.page.md} +2 -6
  38. data/{usechutney.com/docs/rules/invalid_file_name/index.md → usechutney.com.site/site/src/docs/rules/invalid_file_name.page.md} +2 -6
  39. data/{usechutney.com/docs/rules/missing-example-name/index.md → usechutney.com.site/site/src/docs/rules/missing-example-name.page.md} +2 -6
  40. data/{usechutney.com/docs/rules/missing-example-table/index.md → usechutney.com.site/site/src/docs/rules/missing-example-table.page.md} +2 -6
  41. data/{usechutney.com/docs/rules/missing-feature-description/index.md → usechutney.com.site/site/src/docs/rules/missing-feature-description.page.md} +2 -6
  42. data/{usechutney.com/docs/rules/missing-feature-name/index.md → usechutney.com.site/site/src/docs/rules/missing-feature-name.page.md} +2 -6
  43. data/{usechutney.com/docs/rules/missing-scenario-name/index.md → usechutney.com.site/site/src/docs/rules/missing-scenario-name.page.md} +2 -6
  44. data/{usechutney.com/docs/rules/missing-scenario-outline/index.md → usechutney.com.site/site/src/docs/rules/missing-scenario-outline.page.md} +2 -6
  45. data/{usechutney.com/docs/rules/missing-test-action/index.md → usechutney.com.site/site/src/docs/rules/missing-test-action.page.md} +2 -6
  46. data/{usechutney.com/docs/rules/missing-test-verification/index.md → usechutney.com.site/site/src/docs/rules/missing-test-verification.page.md} +2 -6
  47. data/{usechutney.com/docs/rules/required-tag-starts-with/index.md → usechutney.com.site/site/src/docs/rules/required-tag-starts-with.page.md} +2 -6
  48. data/{usechutney.com/docs/rules/same-scenario/index.md → usechutney.com.site/site/src/docs/rules/same-scenario.page.md} +2 -7
  49. data/{usechutney.com/docs/rules/same-tag-different-case/index.md → usechutney.com.site/site/src/docs/rules/same-tag-different-case.page.md} +2 -6
  50. data/{usechutney.com/docs/rules/same-tag-for-all-scenarios/index.md → usechutney.com.site/site/src/docs/rules/same-tag-for-all-scenarios.page.md} +2 -6
  51. data/{usechutney.com/docs/rules/scenario-names-match/index.md → usechutney.com.site/site/src/docs/rules/scenario-names-match.page.md} +2 -6
  52. data/{usechutney.com/docs/rules/tag-used-multiple-times/index.md → usechutney.com.site/site/src/docs/rules/tag-used-multiple-times.page.md} +2 -6
  53. data/{usechutney.com/docs/rules/too-clumsy/index.md → usechutney.com.site/site/src/docs/rules/too-clumsy.page.md} +2 -6
  54. data/{usechutney.com/docs/rules/too-long-step/index.md → usechutney.com.site/site/src/docs/rules/too-long-step.page.md} +2 -6
  55. data/{usechutney.com/docs/rules/too-many-different-tags/index.md → usechutney.com.site/site/src/docs/rules/too-many-different-tags.page.md} +2 -6
  56. data/{usechutney.com/docs/rules/too-many-steps/index.md → usechutney.com.site/site/src/docs/rules/too-many-steps.page.md} +2 -6
  57. data/{usechutney.com/docs/rules/too-many-tags/index.md → usechutney.com.site/site/src/docs/rules/too-many-tags.page.md} +2 -6
  58. data/{usechutney.com/docs/rules/unique-scenario-names/index.md → usechutney.com.site/site/src/docs/rules/unique-scenario-names.page.md} +2 -6
  59. data/{usechutney.com/docs/rules/unknown-variable/index.md → usechutney.com.site/site/src/docs/rules/unknown-variable.page.md} +2 -6
  60. data/{usechutney.com/docs/rules/unused-variable/index.md → usechutney.com.site/site/src/docs/rules/unused-variable.page.md} +2 -6
  61. data/{usechutney.com/docs/rules/use-background/index.md → usechutney.com.site/site/src/docs/rules/use-background.page.md} +2 -6
  62. data/{usechutney.com/docs/rules/use-outline/index.md → usechutney.com.site/site/src/docs/rules/use-outline.page.md} +2 -6
  63. data/{usechutney.com/docs/running/index.md → usechutney.com.site/site/src/docs/running.page.md} +2 -6
  64. data/{usechutney.com/pages/index.markdown → usechutney.com.site/site/src/index.page.md} +15 -24
  65. data/usechutney.com.site/site/templates/_nav.html.erb +6 -0
  66. data/usechutney.com.site/site/templates/layout.html.erb +35 -0
  67. data/usechutney.com.site/site/templates/page.html.erb +3 -0
  68. metadata +73 -66
  69. data/usechutney.com/.gitignore +0 -5
  70. data/usechutney.com/Gemfile +0 -37
  71. data/usechutney.com/_config.yml +0 -299
  72. data/usechutney.com/_data/navigation.yml +0 -120
  73. data/usechutney.com/_data/ui-text.yml +0 -2132
  74. data/usechutney.com/_posts/2024-09-23-welcome-to-jekyll.markdown +0 -28
  75. data/usechutney.com/assets/images/pug.png +0 -0
  76. data/usechutney.com/docs/rules/empty-feature-file/index.md +0 -7
  77. data/usechutney.com/pages/404.html +0 -25
  78. /data/{usechutney.com/assets/images → usechutney.com.site/site/assets}/mr_pickle.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ae2fdb3f2afc72f29fb4b9307d9c8716b67b2b84ad64ea2ab5179ce16522d82
4
- data.tar.gz: '08236ceabe6f908bd864190f7f238ad632de140e188f0d16d7c658494307e567'
3
+ metadata.gz: 60a3a93f0607331e34bd1af294bd142a0922041f75a896fea010344b6a34e814
4
+ data.tar.gz: 7162f57716f199229576ab04d14ec73a526cc694435c88d356257423e6792e20
5
5
  SHA512:
6
- metadata.gz: dbb4679be99076b3f70fbb5303fc76eaa13bbe3d8449c9b4e94610f3244afb24565d8f9408fa5f024deb15458f78a5fc625b25ea5c962a951ada64ede283b4ed
7
- data.tar.gz: fc43d12c841b82f8998655d75ba8ce4d555bff26fb151192e9f8aecad5c363a0512a9fd695e2848ff673bfe5531fb2a6e85e72a2b8aaf3b959b9a0a802950a5d
6
+ metadata.gz: fcd4b9f4c1016813b51318f4ac8485e49dcf908e433290dcf70c644bfecedbea6acf8a6763b56cac824af6b8737dd6c9f6bd25dcec8ec983b487894b3d775cfb
7
+ data.tar.gz: b472494d26b2e532259aed6962a492a466da78435df5a0a8e3bda15b7d04504c05f27320fc288a7ba0b586ea348f9860f578b9635d0a9131eae9b4d1e59c935a
data/chutney.gemspec CHANGED
@@ -48,13 +48,13 @@ Gem::Specification.new do |spec|
48
48
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
49
49
  spec.require_paths = ['lib']
50
50
 
51
- spec.add_dependency 'amatch', '>= 0.4', '< 0.6'
52
- spec.add_dependency 'cuke_modeler', '~> 3.21'
51
+ spec.add_dependency 'amatch', '>= 0.4', '< 0.7'
52
+ spec.add_dependency 'cuke_modeler', '~> 3.26'
53
53
  spec.add_dependency 'i18n', '>= 1.8.2', '< 1.15.0'
54
54
  spec.add_dependency 'fast-mcp', '~> 1.5'
55
55
  spec.add_dependency 'language_server-protocol', '~> 3.17'
56
56
  spec.add_dependency 'pastel', '~> 0.7'
57
57
  spec.add_dependency 'tty-pie', '~> 0.3'
58
58
 
59
- spec.required_ruby_version = '>= 3.2'
59
+ spec.required_ruby_version = '>= 3.4'
60
60
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Chutney
4
- VERSION = '3.12.2'
4
+ VERSION = '3.12.3'
5
5
  end
File without changes
@@ -0,0 +1,2 @@
1
+ public/
2
+ .DS_Store
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "Chutney",
3
+ "short_name": "Chutney",
4
+ "icons": [
5
+ {
6
+ "src": "/favicons/android-chrome-192x192.png",
7
+ "sizes": "192x192",
8
+ "type": "image/png"
9
+ },
10
+ {
11
+ "src": "/favicons/android-chrome-512x512.png",
12
+ "sizes": "512x512",
13
+ "type": "image/png"
14
+ }
15
+ ],
16
+ "theme_color": "#0d9488",
17
+ "background_color": "#ffffff",
18
+ "display": "standalone"
19
+ }
@@ -0,0 +1,298 @@
1
+ :root {
2
+ --primary: #0d9488;
3
+ --primary-dark: #115e59;
4
+ --primary-light: #ccfbf1;
5
+ --accent: #f59e0b;
6
+ --text-main: #1e293b;
7
+ --text-muted: #64748b;
8
+ --bg-body: #ffffff;
9
+ --bg-subtle: #f8fafc;
10
+ --border: #e2e8f0;
11
+
12
+ --nav-height: 70px;
13
+ --container-width: 1000px;
14
+
15
+ --radius-sm: 6px;
16
+ --radius-md: 12px;
17
+ --radius-lg: 20px;
18
+
19
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1);
20
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
21
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
22
+
23
+ --font-sans: 'Inter', system-ui, -apple-system, sans-serif;
24
+ --font-mono: 'JetBrains Mono', monospace;
25
+ }
26
+
27
+ /* Reset & Base */
28
+ *,
29
+ *::before,
30
+ *::after {
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ body {
35
+ margin: 0;
36
+ font-family: var(--font-sans);
37
+ color: var(--text-main);
38
+ background: var(--bg-body);
39
+ line-height: 1.7;
40
+ -webkit-font-smoothing: antialiased;
41
+ }
42
+
43
+ img {
44
+ max-width: 100%;
45
+ height: auto;
46
+ border-radius: var(--radius-md);
47
+ }
48
+
49
+ /* Layout */
50
+ .container {
51
+ max-width: var(--container-width);
52
+ margin: 0 auto;
53
+ padding: 0 24px;
54
+ }
55
+
56
+ /* Header */
57
+ .site-header {
58
+ height: var(--nav-height);
59
+ position: sticky;
60
+ top: 0;
61
+ z-index: 100;
62
+ background: rgba(255, 255, 255, 0.8);
63
+ backdrop-filter: blur(12px);
64
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
65
+ }
66
+
67
+ .site-header .container {
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: space-between;
71
+ height: 100%;
72
+ }
73
+
74
+ .site-title {
75
+ font-weight: 800;
76
+ font-size: 1.5rem;
77
+ background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);
78
+ -webkit-background-clip: text;
79
+ -webkit-text-fill-color: transparent;
80
+ text-decoration: none;
81
+ letter-spacing: -0.02em;
82
+ }
83
+
84
+ /* Nav */
85
+ nav a {
86
+ margin-left: 8px;
87
+ padding: 8px 16px;
88
+ color: var(--text-muted);
89
+ text-decoration: none;
90
+ font-weight: 600;
91
+ font-size: 0.95rem;
92
+ border-radius: 50px;
93
+ transition: all 0.2s ease;
94
+ }
95
+
96
+ nav a:hover {
97
+ color: var(--primary);
98
+ background: var(--primary-light);
99
+ }
100
+
101
+ /* Main Content */
102
+ main {
103
+ min-height: calc(100vh - var(--nav-height) - 100px);
104
+ padding: 60px 0;
105
+ }
106
+
107
+ /* Typography */
108
+ h1,
109
+ h2,
110
+ h3,
111
+ h4,
112
+ h5,
113
+ h6 {
114
+ color: var(--text-main);
115
+ margin-top: 2.5em;
116
+ margin-bottom: 0.8em;
117
+ line-height: 1.25;
118
+ letter-spacing: -0.02em;
119
+ }
120
+
121
+ h1 {
122
+ font-size: 3rem;
123
+ font-weight: 800;
124
+ margin-top: 0.5em;
125
+ background: linear-gradient(to right, var(--text-main), var(--text-muted));
126
+ -webkit-background-clip: text;
127
+ -webkit-text-fill-color: transparent;
128
+ }
129
+
130
+ h2 {
131
+ font-size: 2rem;
132
+ font-weight: 700;
133
+ border-bottom: 1px solid var(--border);
134
+ padding-bottom: 0.3em;
135
+ }
136
+
137
+ h3 {
138
+ font-size: 1.5rem;
139
+ font-weight: 600;
140
+ }
141
+
142
+ p {
143
+ margin-bottom: 1.5em;
144
+ color: #475569;
145
+ font-size: 1.05rem;
146
+ }
147
+
148
+ a {
149
+ color: var(--primary);
150
+ text-decoration: none;
151
+ font-weight: 500;
152
+ transition: color 0.2s;
153
+ }
154
+
155
+ a:hover {
156
+ color: var(--primary-dark);
157
+ text-decoration: underline;
158
+ text-decoration-thickness: 2px;
159
+ text-underline-offset: 2px;
160
+ }
161
+
162
+ /* Buttons */
163
+ .btn {
164
+ display: inline-flex;
165
+ align-items: center;
166
+ justify-content: center;
167
+ padding: 12px 24px;
168
+ border-radius: 50px;
169
+ font-weight: 600;
170
+ text-decoration: none !important;
171
+ transition: transform 0.2s, box-shadow 0.2s;
172
+ cursor: pointer;
173
+ border: none;
174
+ }
175
+
176
+ .btn:hover {
177
+ transform: translateY(-2px);
178
+ box-shadow: var(--shadow-md);
179
+ }
180
+
181
+ .btn-primary {
182
+ background: var(--primary);
183
+ color: white;
184
+ }
185
+
186
+ .btn-primary:hover {
187
+ background: var(--primary-dark);
188
+ color: white;
189
+ }
190
+
191
+ .hero-section {
192
+ text-align: center;
193
+ padding: 20px 0;
194
+ background: radial-gradient(circle at 50% 50%, var(--bg-subtle) 0%, #fff 100%);
195
+ border-radius: var(--radius-lg);
196
+ margin-bottom: 60px;
197
+ border: 1px solid var(--border);
198
+ }
199
+
200
+ /* Code Blocks */
201
+ pre {
202
+ background: #1e293b;
203
+ color: #e2e8f0;
204
+ padding: 24px;
205
+ border-radius: var(--radius-md);
206
+ overflow-x: auto;
207
+ margin: 2em 0;
208
+ box-shadow: var(--shadow-lg);
209
+ position: relative;
210
+ }
211
+
212
+ /* "Mac" dots for code blocks */
213
+ pre::before {
214
+ content: " ";
215
+ display: block;
216
+ position: absolute;
217
+ top: 15px;
218
+ left: 15px;
219
+ width: 10px;
220
+ height: 10px;
221
+ border-radius: 50%;
222
+ background: #ff5f56;
223
+ box-shadow: 20px 0 0 #ffbd2e, 40px 0 0 #27c93f;
224
+ }
225
+
226
+ code {
227
+ font-family: var(--font-mono);
228
+ font-size: 0.9em;
229
+ background: var(--bg-subtle);
230
+ color: var(--primary-dark);
231
+ padding: 0.2em 0.4em;
232
+ border-radius: 4px;
233
+ border: 1px solid var(--border);
234
+ }
235
+
236
+ pre code {
237
+ background: transparent;
238
+ color: inherit;
239
+ padding: 0;
240
+ border: none;
241
+ display: block;
242
+ margin-top: 15px;
243
+ /* Space for the dots */
244
+ }
245
+
246
+ /* Tables */
247
+ table {
248
+ width: 100%;
249
+ border-collapse: separate;
250
+ border-spacing: 0;
251
+ margin: 2em 0;
252
+ border: 1px solid var(--border);
253
+ border-radius: var(--radius-md);
254
+ overflow: hidden;
255
+ }
256
+
257
+ th,
258
+ td {
259
+ padding: 16px;
260
+ border-bottom: 1px solid var(--border);
261
+ text-align: left;
262
+ }
263
+
264
+ th {
265
+ background: var(--bg-subtle);
266
+ font-weight: 600;
267
+ color: var(--text-main);
268
+ text-transform: uppercase;
269
+ font-size: 0.75rem;
270
+ letter-spacing: 0.05em;
271
+ }
272
+
273
+ tr:last-child td {
274
+ border-bottom: none;
275
+ }
276
+
277
+ tr:hover td {
278
+ background: var(--bg-subtle);
279
+ }
280
+
281
+ /* Blockquotes */
282
+ blockquote {
283
+ border-left: 4px solid var(--accent);
284
+ margin: 2em 0;
285
+ padding: 1em 2em;
286
+ background: #fffbeb;
287
+ border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
288
+ color: var(--text-main);
289
+ }
290
+
291
+ /* Footer */
292
+ .site-footer {
293
+ border-top: 1px solid var(--border);
294
+ padding: 60px 0;
295
+ background: var(--bg-subtle);
296
+ text-align: center;
297
+ color: var(--text-muted);
298
+ }
@@ -1,9 +1,4 @@
1
- ---
2
- title: "About"
3
- layout: single
4
- permalink: /pages/about/
5
- author_profile: true
6
- ---
1
+ # About
7
2
 
8
3
  Chutney is originally a fork of the abandoned [gherkin_lint](https://github.com/funkwerk/gherkin_lint). The original authors remain credited in the gemspec. It has been reworked and extended to support more rules and to be more flexible.
9
4
 
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Configuring Chutney"
3
- layout: single
4
- permalink: /docs/configuration/
5
- ---
1
+ # Configuring Chutney
6
2
 
7
3
  Chutney has a default configuration which may or may not suit your needs. It's rules are defined in a simple YAML configuration file that you can customise.
8
4
 
@@ -101,4 +97,4 @@ UseBackground:
101
97
  Enabled: true
102
98
  UseOutline:
103
99
  Enabled: true
104
- ```
100
+ ```
@@ -1,11 +1,7 @@
1
- ---
2
- title: "Disabling Rules"
3
- layout: single
4
- permalink: /docs/disabling-rules/
5
- ---
1
+ # Disabling Rules
6
2
 
7
3
  With all the best will and good intentions in the world, sometimes you need to break a rule. You might need to do this for a very good reason or because the rule is mis-identifing something that you think is valid.
8
4
 
9
5
  To do this, use the tag format `@disable<Linter Name>`. For example `@disableTooLongStep`.
10
6
 
11
- If used at the feature level, the linter will be deactivated for the whole file, used at the scenario level, only that one scenario will be excused.
7
+ If used at the feature level, the linter will be deactivated for the whole file, used at the scenario level, only that one scenario will be excused.
@@ -0,0 +1,17 @@
1
+ # Documentation
2
+
3
+ ## Getting Started
4
+
5
+ * [Installation](/docs/installing)
6
+ * [Running Chutney](/docs/running)
7
+ * [Configuration](/docs/configuration)
8
+
9
+ ## Rules
10
+
11
+ * [All Rules](/docs/rules)
12
+ * [Disabling Rules](/docs/disabling-rules)
13
+
14
+ ## Advanced Usage
15
+
16
+ * [Language Server](/docs/language-server)
17
+ * [MCP Server (Model Context Protocol)](/docs/mcp)
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Installing Chutney"
3
- layout: single
4
- permalink: /docs/installing/
5
- ---
1
+ # Installing Chutney
6
2
 
7
3
  Chutney is written in Ruby and distributed as a Ruby gem. This means you need to have Ruby installed on your system to use Chutney.
8
4
 
@@ -27,4 +23,4 @@ or you can install Chutney locally by adding it to your Gemfile (you should do t
27
23
  ```ruby
28
24
  gem 'chutney', "~> <latest version number>"
29
25
  ```
30
- (you can grab the latest version number from the [RubyGems page](https://rubygems.org/gems/chutney).)
26
+ (you can grab the latest version number from the [RubyGems page](https://rubygems.org/gems/chutney).)
@@ -1,11 +1,6 @@
1
- ---
2
- title: "Chutney Language Server"
3
- layout: single
4
- permalink: /docs/language-server/
5
- ---
1
+ # Chutney Language Server
6
2
 
7
- {: .notice}
8
- Since v3.8.0
3
+ > Since v3.8.0
9
4
 
10
5
  Chutney now includes a Language Server (LSP), which can be used with your favourite editor to provide real-time feedback on your feature files.
11
6
 
@@ -25,4 +20,4 @@ It will listen for open / close and save events to evaluate the current feature
25
20
 
26
21
  [vscode-chutney](https://github.com/BillyRuffian/vscode-chutney) adds Chutney LSP integration into VS Code,
27
22
 
28
- You can install this extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=NigelBrookes-Thomas.vscode-chutney).
23
+ You can install this extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=NigelBrookes-Thomas.vscode-chutney).
@@ -1,11 +1,6 @@
1
- ---
2
- title: "Chutney MCP Server"
3
- layout: single
4
- permalink: /docs/mcp/
5
- ---
6
-
7
- {: .notice}
8
- Since v3.12.0
1
+ # Chutney MCP Server
2
+
3
+ > Since v3.12.0
9
4
 
10
5
  Chutney now ships with a Model Context Protocol (MCP) server for easy integration with AI LLMs, afterall if they're helping author gherkin, it should be tasty.
11
6
 
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Avoid Colons at Start of Names"
3
- layout: single
4
- permalink: /docs/rules/avoid-colons-at-start-of-names/
5
- ---
1
+ # Avoid Colons at Start of Names
6
2
 
7
3
  Don't have colons at the start of feature or scenario names. It's probably a mistake if you have them from double typing the colon after the `Feature` or `Scenario` keyword.
8
4
 
@@ -25,4 +21,4 @@ Feature: My Feature
25
21
  Given I have visited the website
26
22
  When I log in
27
23
  Then I will see my account
28
- ```
24
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Avoid Comma in Tags"
3
- layout: single
4
- permalink: /docs/rules/avoid-comma-in-tags/
5
- ---
1
+ # Avoid Comma in Tags
6
2
 
7
3
  Don't put a comma in tags. It's probably a mistake if you have them from trying write a list of tags but the comma will form part of the name and makes it hard to include or exclude the tag from a Cucumber run.
8
4
 
@@ -23,4 +19,4 @@ Then I will see my account
23
19
  Given I have visited the website
24
20
  When I log in
25
21
  Then I will see my account
26
- ```
22
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Avoid Full Stops"
3
- layout: single
4
- permalink: /docs/rules/avoid-full-stops/
5
- ---
1
+ # Avoid Full Stops
6
2
 
7
3
  Don't include a full stop (a period) in your steps because it makes reuse a lot harder, espcially if that step suddenly appears in the middle of a scenario.
8
4
 
@@ -20,4 +16,4 @@ Then I will see my account
20
16
  Given I have visited the website
21
17
  When I log in
22
18
  Then I will see my account
23
- ```
19
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Avoid Outline for Single Example"
3
- layout: single
4
- permalink: /docs/rules/avoid-outline-for-single-example/
5
- ---
1
+ # Avoid Outline for Single Example
6
2
 
7
3
  If you have a Scenario Outline, but only one example, then you should convert it to a Scenario because it reduces the complexity of the feature file.
8
4
 
@@ -25,4 +21,4 @@ Scenario: Log in with valid credentials
25
21
  Given I have visited the website
26
22
  When I log in with "user1" and "pass1"
27
23
  Then I will see my account
28
- ```
24
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Avoid Scripting"
3
- layout: single
4
- permalink: /docs/rules/avoid-scripting/
5
- ---
1
+ # Avoid Scripting
6
2
 
7
3
  If you find yourself needing to write more than one `when` step, you a probably scripting. This is a bad practice because it makes your tests harder to read and maintain. It also makes it harder to debug when something goes wrong.
8
4
 
@@ -30,4 +26,4 @@ Scenario: Log in with valid credentials
30
26
  Given I have visited the website
31
27
  When I log in with "user1" and "pass1"
32
28
  Then I will see my account
33
- ```
29
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Avoid Splat Steps in Background"
3
- layout: single
4
- permalink: /docs/rules/avoid-splat-steps-in-background/
5
- ---
1
+ # Avoid Splat Steps in Background
6
2
 
7
3
  Splat steps (using an asterisk `*`) can obscure the what kind of step is present and make it less like reading natural language.
8
4
 
@@ -22,4 +18,4 @@ Background:
22
18
  Given I have visited the website
23
19
  And I have logged in
24
20
  And I have viewed sale items
25
- ```
21
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Avoid Splat Steps in Scenarios"
3
- layout: single
4
- permalink: /docs/rules/avoid-splat-steps-in-scenarios/
5
- ---
1
+ # Avoid Splat Steps in Scenarios
6
2
 
7
3
  Splat steps (using an asterisk `*`) can obscure the what kind of step is present and make it less like reading natural language.
8
4
 
@@ -26,4 +22,4 @@ Scenario: Log in with valid credentials
26
22
  And I have viewed sale items
27
23
  When I view special offers
28
24
  Then I will see my discount code
29
- ```
25
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Avoid Typographers' Quotes"
3
- layout: single
4
- permalink: /docs/rules/avoid-typographers-quotes/
5
- ---
1
+ # Avoid Typographers' Quotes
6
2
 
7
3
  Cutting and pasting from Word documents? Is that pasting in curly-quotes instead of neutral ones you would type on a keyboard? Are you sure that’s what you want?
8
4
 
@@ -21,4 +17,4 @@ Scenario: Log in with valid credentials
21
17
  Scenario: Log in with valid credentials
22
18
  When I visit the website
23
19
  Then I will see the message "account information"
24
- ```
20
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Background Does More Than Setup"
3
- layout: single
4
- permalink: /docs/rules/background-does-more-than-setup/
5
- ---
1
+ # Background Does More Than Setup
6
2
 
7
3
  The `Background` should only perform common setup activities to prepare the scenarios that follow. They should not contain any `When` or `Then` steps, only `Given`.
8
4
 
@@ -25,4 +21,4 @@ Background:
25
21
  Scenario: logging in
26
22
  When I log in
27
23
  Then I will see my account
28
- ```
24
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Background Requires Multiple Scenarios"
3
- layout: single
4
- permalink: /docs/rules/background-requires-multiple-scenarios/
5
- ---
1
+ # Background Requires Multiple Scenarios
6
2
 
7
3
  If you only have one scenario, you don't need a `Background`. The `Background` should only be used when you have multiple scenarios that share the same setup steps.
8
4
 
@@ -23,4 +19,4 @@ Scenario: logging in
23
19
  Given I have visited the website
24
20
  When I log in
25
21
  Then I will see my account
26
- ```
22
+ ```
@@ -1,8 +1,4 @@
1
- ---
2
- title: "Bad Scenario Name"
3
- layout: single
4
- permalink: /docs/rules/bad-scenario-name/
5
- ---
1
+ # Bad Scenario Name
6
2
 
7
3
  {: .notice}
8
4
  English language only.
@@ -25,4 +21,4 @@ Scenario: logging in
25
21
  Given I have visited the website
26
22
  When I log in
27
23
  Then I will see my account
28
- ```
24
+ ```
@@ -0,0 +1,3 @@
1
+ # Empty Feature File
2
+
3
+ You have a feature file with no content. This is not a valid feature file. A feature file should contain at least one scenario.