goodcheck 2.5.0 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -2
- data/README.md +4 -447
- data/lib/goodcheck.rb +5 -5
- data/lib/goodcheck/analyzer.rb +13 -9
- data/lib/goodcheck/buffer.rb +11 -16
- data/lib/goodcheck/cli.rb +80 -56
- data/lib/goodcheck/commands/check.rb +42 -26
- data/lib/goodcheck/commands/config_loading.rb +20 -2
- data/lib/goodcheck/commands/init.rb +4 -2
- data/lib/goodcheck/commands/pattern.rb +2 -1
- data/lib/goodcheck/commands/test.rb +14 -11
- data/lib/goodcheck/config_loader.rb +17 -20
- data/lib/goodcheck/error.rb +3 -0
- data/lib/goodcheck/exit_status.rb +6 -0
- data/lib/goodcheck/glob.rb +14 -3
- data/lib/goodcheck/import_loader.rb +42 -10
- data/lib/goodcheck/issue.rb +3 -3
- data/lib/goodcheck/location.rb +28 -0
- data/lib/goodcheck/logger.rb +4 -4
- data/lib/goodcheck/reporters/json.rb +4 -0
- data/lib/goodcheck/reporters/text.rb +42 -11
- data/lib/goodcheck/version.rb +1 -1
- metadata +29 -92
- data/.github/workflows/test.yml +0 -37
- data/.gitignore +0 -13
- data/.rubocop.yml +0 -5
- data/Dockerfile +0 -13
- data/Gemfile +0 -6
- data/Rakefile +0 -70
- data/benchmark/gc.c +0 -12221
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/cheatsheet.pdf +0 -0
- data/docusaurus/.dockerignore +0 -2
- data/docusaurus/.gitignore +0 -12
- data/docusaurus/Dockerfile +0 -10
- data/docusaurus/docker-compose.yml +0 -18
- data/docusaurus/docs/commands.md +0 -69
- data/docusaurus/docs/configuration.md +0 -300
- data/docusaurus/docs/development.md +0 -15
- data/docusaurus/docs/getstarted.md +0 -46
- data/docusaurus/docs/rules.md +0 -79
- data/docusaurus/website/README.md +0 -193
- data/docusaurus/website/core/Footer.js +0 -100
- data/docusaurus/website/package.json +0 -14
- data/docusaurus/website/pages/en/index.js +0 -207
- data/docusaurus/website/pages/en/versions.js +0 -118
- data/docusaurus/website/sidebars.json +0 -11
- data/docusaurus/website/siteConfig.js +0 -171
- data/docusaurus/website/static/css/code-block-buttons.css +0 -39
- data/docusaurus/website/static/css/custom.css +0 -245
- data/docusaurus/website/static/img/favicon.ico +0 -0
- data/docusaurus/website/static/js/code-block-buttons.js +0 -47
- data/docusaurus/website/versioned_docs/version-1.0.0/commands.md +0 -70
- data/docusaurus/website/versioned_docs/version-1.0.0/configuration.md +0 -296
- data/docusaurus/website/versioned_docs/version-1.0.0/development.md +0 -16
- data/docusaurus/website/versioned_docs/version-1.0.0/getstarted.md +0 -47
- data/docusaurus/website/versioned_docs/version-1.0.0/rules.md +0 -81
- data/docusaurus/website/versioned_docs/version-1.0.2/rules.md +0 -79
- data/docusaurus/website/versioned_docs/version-2.4.0/configuration.md +0 -301
- data/docusaurus/website/versioned_docs/version-2.4.3/rules.md +0 -80
- data/docusaurus/website/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
- data/docusaurus/website/versioned_sidebars/version-1.0.2-sidebars.json +0 -11
- data/docusaurus/website/versioned_sidebars/version-2.4.0-sidebars.json +0 -11
- data/docusaurus/website/versions.json +0 -10
- data/docusaurus/website/yarn.lock +0 -6806
- data/goodcheck.gemspec +0 -36
- data/goodcheck.yml +0 -10
- data/logo/GoodCheck Horizontal.pdf +0 -899
- data/logo/GoodCheck Horizontal.png +0 -0
- data/logo/GoodCheck Horizontal.svg +0 -55
- data/logo/GoodCheck logo.png +0 -0
- data/logo/GoodCheck vertical.png +0 -0
- data/sample.yml +0 -57
@@ -1,46 +0,0 @@
|
|
1
|
-
---
|
2
|
-
id: getstarted
|
3
|
-
title: Getting Started
|
4
|
-
sidebar_label: Get Started
|
5
|
-
---
|
6
|
-
|
7
|
-
## Installation
|
8
|
-
|
9
|
-
```bash
|
10
|
-
$ gem install goodcheck
|
11
|
-
```
|
12
|
-
|
13
|
-
Or you can use `bundler`!
|
14
|
-
|
15
|
-
If you would not like to install Goodcheck to system (e.g. you would not like to install Ruby 2.4 or higher), you can use a docker image. [See below](#docker-images).
|
16
|
-
|
17
|
-
## Docker Images
|
18
|
-
|
19
|
-
We provide Docker images of Goodcheck so that you can try Goodcheck without installing them.
|
20
|
-
|
21
|
-
- https://hub.docker.com/r/sider/goodcheck/
|
22
|
-
|
23
|
-
```bash
|
24
|
-
$ docker pull sider/goodcheck
|
25
|
-
$ docker run -t --rm -v "$(pwd):/work" sider/goodcheck check
|
26
|
-
```
|
27
|
-
|
28
|
-
The default `latest` tag points to the latest release of Goodcheck.
|
29
|
-
You can pick a version of Goodcheck from [tags page](https://hub.docker.com/r/sider/goodcheck/tags).
|
30
|
-
|
31
|
-
## Quickstart
|
32
|
-
|
33
|
-
```bash
|
34
|
-
$ goodcheck init
|
35
|
-
$ vim goodcheck.yml
|
36
|
-
$ goodcheck check
|
37
|
-
```
|
38
|
-
|
39
|
-
The `init` command generates a template of `goodcheck.yml` configuration file for you.
|
40
|
-
Edit the config file to define patterns you want to check.
|
41
|
-
Then run `check` command, and it will print matched texts.
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
data/docusaurus/docs/rules.md
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
---
|
2
|
-
id: rules
|
3
|
-
title: Rules
|
4
|
-
sidebar_label: Rules
|
5
|
-
---
|
6
|
-
|
7
|
-
|
8
|
-
## Rule: `"_blank"` Security Issue
|
9
|
-
|
10
|
-
When `target = "_blank"` is used, the opened page can access the original window object and potentially redirect the original page to a malicious URL. In this example, the rule will look for patterns of `"_blank"` and suggest to use `rel="noopener"` to prevent the opened page from having access.
|
11
|
-
|
12
|
-
```yaml
|
13
|
-
rules:
|
14
|
-
- id: security.link
|
15
|
-
pattern:
|
16
|
-
- token: 'target="_blank"'
|
17
|
-
- token: 'target: "_blank"'
|
18
|
-
message: |
|
19
|
-
Specify rel="noopener" for security reasons.
|
20
|
-
|
21
|
-
Opening new tab without rel="noopener" may cause a security issue.
|
22
|
-
It allows modifying original tab URLs from opened tabs.
|
23
|
-
justification:
|
24
|
-
- When opening a URL in our service
|
25
|
-
glob:
|
26
|
-
- "**/*.html"
|
27
|
-
- "**/*.html.erb"
|
28
|
-
fail:
|
29
|
-
- '<a href="https://github.com" target="_blank">GitHub</a>'
|
30
|
-
pass:
|
31
|
-
- '<a href="/signup">Signup</a>'
|
32
|
-
```
|
33
|
-
|
34
|
-
## Rule: Sign in
|
35
|
-
> Warning: This rule needs customization.
|
36
|
-
|
37
|
-
Keep wording consistent to provide a clear experience for users. In this example, the use of Log in or Log out would prompt the use of sign in / sign out instead.
|
38
|
-
|
39
|
-
```yaml
|
40
|
-
rules:
|
41
|
-
- id: wording.signin
|
42
|
-
pattern:
|
43
|
-
- token: Log in
|
44
|
-
case_sensitive: false
|
45
|
-
- token: Log out
|
46
|
-
case_sensitive: false
|
47
|
-
glob:
|
48
|
-
- "**/*.html.erb"
|
49
|
-
- "**/*.yml"
|
50
|
-
message: |
|
51
|
-
Please use “sign in”/“sign out”
|
52
|
-
|
53
|
-
We use “sign in” instead of “log in” and “sign out” instead of “log out”.
|
54
|
-
See the wording policy for details.
|
55
|
-
|
56
|
-
https://docs.example.com/1840
|
57
|
-
fail:
|
58
|
-
- "Log in"
|
59
|
-
- "Log out"
|
60
|
-
pass:
|
61
|
-
- "Sign in"
|
62
|
-
- "Sign out"
|
63
|
-
```
|
64
|
-
|
65
|
-
## Rule: mixin
|
66
|
-
> Warning: This rule needs customization.
|
67
|
-
|
68
|
-
A mixin lets you make groups of CSS declarations that you want to reuse throughout your site. In this example, it creates a warning when the color pattern is used and suggests using a mixin instead.
|
69
|
-
|
70
|
-
```yaml
|
71
|
-
rules:
|
72
|
-
- id: use-mixin
|
73
|
-
message: Use mixin.
|
74
|
-
pattern: "color: #038cf4;"
|
75
|
-
pass:
|
76
|
-
- "@include some-mixin;"
|
77
|
-
fail:
|
78
|
-
- "color: #038cf4;"
|
79
|
-
```
|
@@ -1,193 +0,0 @@
|
|
1
|
-
This website was created with [Docusaurus](https://docusaurus.io/).
|
2
|
-
|
3
|
-
# What's In This Document
|
4
|
-
|
5
|
-
* [Get Started in 5 Minutes](#get-started-in-5-minutes)
|
6
|
-
* [Directory Structure](#directory-structure)
|
7
|
-
* [Editing Content](#editing-content)
|
8
|
-
* [Adding Content](#adding-content)
|
9
|
-
* [Full Documentation](#full-documentation)
|
10
|
-
|
11
|
-
# Get Started in 5 Minutes
|
12
|
-
|
13
|
-
1. Make sure all the dependencies for the website are installed:
|
14
|
-
|
15
|
-
```sh
|
16
|
-
# Install dependencies
|
17
|
-
$ yarn
|
18
|
-
```
|
19
|
-
2. Run your dev server:
|
20
|
-
|
21
|
-
```sh
|
22
|
-
# Start the site
|
23
|
-
$ yarn start
|
24
|
-
```
|
25
|
-
|
26
|
-
## Directory Structure
|
27
|
-
|
28
|
-
Your project file structure should look something like this
|
29
|
-
|
30
|
-
```
|
31
|
-
my-docusaurus/
|
32
|
-
docs/
|
33
|
-
doc-1.md
|
34
|
-
doc-2.md
|
35
|
-
doc-3.md
|
36
|
-
website/
|
37
|
-
blog/
|
38
|
-
2016-3-11-oldest-post.md
|
39
|
-
2017-10-24-newest-post.md
|
40
|
-
core/
|
41
|
-
node_modules/
|
42
|
-
pages/
|
43
|
-
static/
|
44
|
-
css/
|
45
|
-
img/
|
46
|
-
package.json
|
47
|
-
sidebar.json
|
48
|
-
siteConfig.js
|
49
|
-
```
|
50
|
-
|
51
|
-
# Editing Content
|
52
|
-
|
53
|
-
## Editing an existing docs page
|
54
|
-
|
55
|
-
Edit docs by navigating to `docs/` and editing the corresponding document:
|
56
|
-
|
57
|
-
`docs/doc-to-be-edited.md`
|
58
|
-
|
59
|
-
```markdown
|
60
|
-
---
|
61
|
-
id: page-needs-edit
|
62
|
-
title: This Doc Needs To Be Edited
|
63
|
-
---
|
64
|
-
|
65
|
-
Edit me...
|
66
|
-
```
|
67
|
-
|
68
|
-
For more information about docs, click [here](https://docusaurus.io/docs/en/navigation)
|
69
|
-
|
70
|
-
## Editing an existing blog post
|
71
|
-
|
72
|
-
Edit blog posts by navigating to `website/blog` and editing the corresponding post:
|
73
|
-
|
74
|
-
`website/blog/post-to-be-edited.md`
|
75
|
-
```markdown
|
76
|
-
---
|
77
|
-
id: post-needs-edit
|
78
|
-
title: This Blog Post Needs To Be Edited
|
79
|
-
---
|
80
|
-
|
81
|
-
Edit me...
|
82
|
-
```
|
83
|
-
|
84
|
-
For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog)
|
85
|
-
|
86
|
-
# Adding Content
|
87
|
-
|
88
|
-
## Adding a new docs page to an existing sidebar
|
89
|
-
|
90
|
-
1. Create the doc as a new markdown file in `/docs`, example `docs/newly-created-doc.md`:
|
91
|
-
|
92
|
-
```md
|
93
|
-
---
|
94
|
-
id: newly-created-doc
|
95
|
-
title: This Doc Needs To Be Edited
|
96
|
-
---
|
97
|
-
|
98
|
-
My new content here..
|
99
|
-
```
|
100
|
-
|
101
|
-
1. Refer to that doc's ID in an existing sidebar in `website/sidebar.json`:
|
102
|
-
|
103
|
-
```javascript
|
104
|
-
// Add newly-created-doc to the Getting Started category of docs
|
105
|
-
{
|
106
|
-
"docs": {
|
107
|
-
"Getting Started": [
|
108
|
-
"quick-start",
|
109
|
-
"newly-created-doc" // new doc here
|
110
|
-
],
|
111
|
-
...
|
112
|
-
},
|
113
|
-
...
|
114
|
-
}
|
115
|
-
```
|
116
|
-
|
117
|
-
For more information about adding new docs, click [here](https://docusaurus.io/docs/en/navigation)
|
118
|
-
|
119
|
-
## Adding a new blog post
|
120
|
-
|
121
|
-
1. Make sure there is a header link to your blog in `website/siteConfig.js`:
|
122
|
-
|
123
|
-
`website/siteConfig.js`
|
124
|
-
```javascript
|
125
|
-
headerLinks: [
|
126
|
-
...
|
127
|
-
{ blog: true, label: 'Blog' },
|
128
|
-
...
|
129
|
-
]
|
130
|
-
```
|
131
|
-
|
132
|
-
2. Create the blog post with the format `YYYY-MM-DD-My-Blog-Post-Title.md` in `website/blog`:
|
133
|
-
|
134
|
-
`website/blog/2018-05-21-New-Blog-Post.md`
|
135
|
-
|
136
|
-
```markdown
|
137
|
-
---
|
138
|
-
author: Frank Li
|
139
|
-
authorURL: https://twitter.com/foobarbaz
|
140
|
-
authorFBID: 503283835
|
141
|
-
title: New Blog Post
|
142
|
-
---
|
143
|
-
|
144
|
-
Lorem Ipsum...
|
145
|
-
```
|
146
|
-
|
147
|
-
For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog)
|
148
|
-
|
149
|
-
## Adding items to your site's top navigation bar
|
150
|
-
|
151
|
-
1. Add links to docs, custom pages or external links by editing the headerLinks field of `website/siteConfig.js`:
|
152
|
-
|
153
|
-
`website/siteConfig.js`
|
154
|
-
```javascript
|
155
|
-
{
|
156
|
-
headerLinks: [
|
157
|
-
...
|
158
|
-
/* you can add docs */
|
159
|
-
{ doc: 'my-examples', label: 'Examples' },
|
160
|
-
/* you can add custom pages */
|
161
|
-
{ page: 'help', label: 'Help' },
|
162
|
-
/* you can add external links */
|
163
|
-
{ href: 'https://github.com/facebook/Docusaurus', label: 'GitHub' },
|
164
|
-
...
|
165
|
-
],
|
166
|
-
...
|
167
|
-
}
|
168
|
-
```
|
169
|
-
|
170
|
-
For more information about the navigation bar, click [here](https://docusaurus.io/docs/en/navigation)
|
171
|
-
|
172
|
-
## Adding custom pages
|
173
|
-
|
174
|
-
1. Docusaurus uses React components to build pages. The components are saved as .js files in `website/pages/en`:
|
175
|
-
1. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element:
|
176
|
-
|
177
|
-
`website/siteConfig.js`
|
178
|
-
```javascript
|
179
|
-
{
|
180
|
-
headerLinks: [
|
181
|
-
...
|
182
|
-
{ page: 'my-new-custom-page', label: 'My New Custom Page' },
|
183
|
-
...
|
184
|
-
],
|
185
|
-
...
|
186
|
-
}
|
187
|
-
```
|
188
|
-
|
189
|
-
For more information about custom pages, click [here](https://docusaurus.io/docs/en/custom-pages).
|
190
|
-
|
191
|
-
# Full Documentation
|
192
|
-
|
193
|
-
Full documentation can be found on the [website](https://docusaurus.io/).
|
@@ -1,100 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright (c) 2017-present, Facebook, Inc.
|
3
|
-
*
|
4
|
-
* This source code is licensed under the MIT license found in the
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
6
|
-
*/
|
7
|
-
|
8
|
-
const React = require('react');
|
9
|
-
|
10
|
-
class Footer extends React.Component {
|
11
|
-
docUrl(doc) {
|
12
|
-
const baseUrl = this.props.config.baseUrl;
|
13
|
-
const docsUrl = this.props.config.docsUrl;
|
14
|
-
const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`;
|
15
|
-
return `${baseUrl}${docsPart}${doc}`;
|
16
|
-
}
|
17
|
-
|
18
|
-
pageUrl(doc, language) {
|
19
|
-
const baseUrl = this.props.config.baseUrl;
|
20
|
-
return baseUrl + (language ? `${language}/` : '') + doc;
|
21
|
-
}
|
22
|
-
|
23
|
-
render() {
|
24
|
-
return (
|
25
|
-
<footer className="nav-footer" id="footer">
|
26
|
-
<section className="sitemap">
|
27
|
-
<a href={this.props.config.baseUrl} className="nav-home">
|
28
|
-
{this.props.config.footerIcon && (
|
29
|
-
<img
|
30
|
-
src={this.props.config.baseUrl + this.props.config.footerIcon}
|
31
|
-
alt={this.props.config.title}
|
32
|
-
width="40"
|
33
|
-
height="39"
|
34
|
-
/>
|
35
|
-
)}
|
36
|
-
</a>
|
37
|
-
<div>
|
38
|
-
<h5>Docs</h5>
|
39
|
-
<a href={this.docUrl('getstarted.html')}>
|
40
|
-
Getting Started
|
41
|
-
</a>
|
42
|
-
<a href={this.docUrl('configuration.html')}>
|
43
|
-
Configuration
|
44
|
-
</a>
|
45
|
-
<a href={this.docUrl('rules.html')}>
|
46
|
-
Rules
|
47
|
-
</a>
|
48
|
-
<a href={this.docUrl('commands.html')}>
|
49
|
-
Commands
|
50
|
-
</a>
|
51
|
-
<a href={this.docUrl('development.html')}>
|
52
|
-
Development
|
53
|
-
</a>
|
54
|
-
</div>
|
55
|
-
<div>
|
56
|
-
<h5>More</h5>
|
57
|
-
<a href="https://github.com/sider/goodcheck">GitHub</a>
|
58
|
-
<a
|
59
|
-
className="github-button"
|
60
|
-
href={this.props.config.repoUrl}
|
61
|
-
data-icon="octicon-star"
|
62
|
-
data-count-href="/sider/goodcheck/stargazers"
|
63
|
-
data-show-count="true"
|
64
|
-
data-count-aria-label="# stargazers on GitHub"
|
65
|
-
aria-label="Star this project on GitHub">
|
66
|
-
Star
|
67
|
-
</a>
|
68
|
-
{this.props.config.twitterUsername && (
|
69
|
-
<div className="social">
|
70
|
-
<a
|
71
|
-
href={`https://twitter.com/${
|
72
|
-
this.props.config.twitterUsername
|
73
|
-
}`}
|
74
|
-
className="twitter-follow-button">
|
75
|
-
Follow @{this.props.config.twitterUsername}
|
76
|
-
</a>
|
77
|
-
</div>
|
78
|
-
)}
|
79
|
-
{this.props.config.facebookAppId && (
|
80
|
-
<div className="social">
|
81
|
-
<div
|
82
|
-
className="fb-like"
|
83
|
-
data-href={this.props.config.url}
|
84
|
-
data-colorscheme="dark"
|
85
|
-
data-layout="standard"
|
86
|
-
data-share="true"
|
87
|
-
data-width="225"
|
88
|
-
data-show-faces="false"
|
89
|
-
/>
|
90
|
-
</div>
|
91
|
-
)}
|
92
|
-
</div>
|
93
|
-
</section>
|
94
|
-
<section className="copyright">{this.props.config.copyright}</section>
|
95
|
-
</footer>
|
96
|
-
);
|
97
|
-
}
|
98
|
-
}
|
99
|
-
|
100
|
-
module.exports = Footer;
|
@@ -1,14 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"scripts": {
|
3
|
-
"examples": "docusaurus-examples",
|
4
|
-
"start": "docusaurus-start",
|
5
|
-
"build": "docusaurus-build",
|
6
|
-
"publish-gh-pages": "docusaurus-publish",
|
7
|
-
"write-translations": "docusaurus-write-translations",
|
8
|
-
"version": "docusaurus-version",
|
9
|
-
"rename-version": "docusaurus-rename-version"
|
10
|
-
},
|
11
|
-
"devDependencies": {
|
12
|
-
"docusaurus": "^1.14.4"
|
13
|
-
}
|
14
|
-
}
|
@@ -1,207 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright (c) 2017-present, Facebook, Inc.
|
3
|
-
*
|
4
|
-
* This source code is licensed under the MIT license found in the
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
6
|
-
*/
|
7
|
-
|
8
|
-
const React = require('react');
|
9
|
-
|
10
|
-
class Splash extends React.Component {
|
11
|
-
render() {
|
12
|
-
return (
|
13
|
-
<div className="feature-container">
|
14
|
-
<FeatureDescription
|
15
|
-
title={this.props.info.title}
|
16
|
-
description={this.props.info.description}
|
17
|
-
button={this.props.info.button}
|
18
|
-
/>
|
19
|
-
<FeatureCodeBoxExtended info={this.props.info} />
|
20
|
-
</div>
|
21
|
-
);
|
22
|
-
}
|
23
|
-
}
|
24
|
-
|
25
|
-
const Button = props => (
|
26
|
-
<div className="plugin-wrapper button-wrapper">
|
27
|
-
<a className="button" href={props.href} target={props.target}>
|
28
|
-
{props.children}
|
29
|
-
</a>
|
30
|
-
</div>
|
31
|
-
);
|
32
|
-
|
33
|
-
class Section extends React.Component {
|
34
|
-
render() {
|
35
|
-
|
36
|
-
return (
|
37
|
-
<div className="section-container">
|
38
|
-
<div className="section-grid">
|
39
|
-
<div className="section-card">
|
40
|
-
<div>
|
41
|
-
<h2>Configuration</h2>
|
42
|
-
<p>Learn the patterns and syntax to make custom rules. </p>
|
43
|
-
<Button href="./docs/configuration">Syntax details</Button>
|
44
|
-
</div>
|
45
|
-
</div>
|
46
|
-
<div className="section-card">
|
47
|
-
<div>
|
48
|
-
<h2>Rules</h2>
|
49
|
-
<p>
|
50
|
-
Want to see some pre-defined rules? Check out some rules here.
|
51
|
-
</p>
|
52
|
-
<Button href="./docs/rules">See rules</Button>
|
53
|
-
</div>
|
54
|
-
</div>
|
55
|
-
<div className="section-card">
|
56
|
-
<div>
|
57
|
-
<h2>Commands</h2>
|
58
|
-
<p>
|
59
|
-
Goodcheck is written to be used on the command line. Learn about
|
60
|
-
it’s usage here.
|
61
|
-
</p>
|
62
|
-
<Button href="./docs/commands">CLI details</Button>
|
63
|
-
</div>
|
64
|
-
</div>
|
65
|
-
</div>
|
66
|
-
</div>
|
67
|
-
);
|
68
|
-
}
|
69
|
-
}
|
70
|
-
|
71
|
-
class Feature extends React.Component {
|
72
|
-
render() {
|
73
|
-
return (
|
74
|
-
<div className="center-container">
|
75
|
-
<div className="feature-container">
|
76
|
-
<FeatureDescription
|
77
|
-
title={this.props.info.title}
|
78
|
-
description={this.props.info.description}
|
79
|
-
/>
|
80
|
-
<FeatureCodeBoxExtended info={this.props.info} />
|
81
|
-
</div>
|
82
|
-
</div>
|
83
|
-
);
|
84
|
-
}
|
85
|
-
}
|
86
|
-
|
87
|
-
class FeatureDescription extends React.Component {
|
88
|
-
render() {
|
89
|
-
return (
|
90
|
-
<div className="description-container">
|
91
|
-
<h1>{this.props.title}</h1>
|
92
|
-
<p>{this.props.description}</p>
|
93
|
-
{this.props.button && (
|
94
|
-
<Button href="./docs/getstarted">{this.props.button}</Button>
|
95
|
-
)}
|
96
|
-
</div>
|
97
|
-
);
|
98
|
-
}
|
99
|
-
}
|
100
|
-
|
101
|
-
class FeatureCodeBoxExtended extends React.Component {
|
102
|
-
render() {
|
103
|
-
const info = this.props.info;
|
104
|
-
return (
|
105
|
-
<div className="code-container">
|
106
|
-
<header className="code-top">goodcheck.yml</header>
|
107
|
-
<section className="code-content">
|
108
|
-
<pre className="yaml">
|
109
|
-
<span className="yaml-key">rules</span>
|
110
|
-
<span className="yaml-syntax">: </span>
|
111
|
-
<br />
|
112
|
-
<span className="yaml-syntax">{` - `}</span>
|
113
|
-
<span className="yaml-key">id</span>
|
114
|
-
<span className="yaml-syntax">: </span>
|
115
|
-
<span className="yaml-value">{info.id}</span>
|
116
|
-
<br />
|
117
|
-
{info.not && (
|
118
|
-
<div>
|
119
|
-
<span className="yaml-key">{` not`}</span>
|
120
|
-
<span className="yaml-syntax">: </span>
|
121
|
-
<br />
|
122
|
-
<span className="yaml-key">{` pattern`}</span>
|
123
|
-
<span className="yaml-syntax">: </span>
|
124
|
-
<span className="yaml-value">{info.pattern}</span>
|
125
|
-
<br />
|
126
|
-
</div>
|
127
|
-
)}
|
128
|
-
{!info.not && (
|
129
|
-
<div>
|
130
|
-
{info.pattern && (
|
131
|
-
<div>
|
132
|
-
<span className="yaml-key">{` pattern`}</span>
|
133
|
-
<span className="yaml-syntax">: </span>
|
134
|
-
<span className="yaml-value">{info.pattern}</span>
|
135
|
-
</div>
|
136
|
-
)}
|
137
|
-
</div>
|
138
|
-
)}
|
139
|
-
<span className="yaml-key">{` message`}</span>
|
140
|
-
<span className="yaml-syntax">: </span>
|
141
|
-
<span className="yaml-value">{`${info.message}`}</span>
|
142
|
-
<br />
|
143
|
-
{info.glob && (
|
144
|
-
<div>
|
145
|
-
<span className="yaml-key">{` glob`}</span>
|
146
|
-
<span className="yaml-syntax">: </span>
|
147
|
-
<span className="yaml-value">{`${info.glob}`}</span>
|
148
|
-
</div>
|
149
|
-
)}
|
150
|
-
</pre>
|
151
|
-
</section>
|
152
|
-
<header className="code-result">Result</header>
|
153
|
-
<section className="code-terminal">
|
154
|
-
<p className="yaml">
|
155
|
-
{`${info.resultFront}`}
|
156
|
-
{info.match && (
|
157
|
-
<span className="terminal-highlight"> {info.match} </span>
|
158
|
-
)}
|
159
|
-
{info.resultEnd && `${info.resultEnd}`}
|
160
|
-
</p>
|
161
|
-
</section>
|
162
|
-
</div>
|
163
|
-
);
|
164
|
-
}
|
165
|
-
}
|
166
|
-
|
167
|
-
class Index extends React.Component {
|
168
|
-
render() {
|
169
|
-
const { config: siteConfig } = this.props;
|
170
|
-
|
171
|
-
const Showcase = () => {
|
172
|
-
|
173
|
-
return (
|
174
|
-
<div className="productShowcaseSection paddingBottom showcaseBackground">
|
175
|
-
<br />
|
176
|
-
<h2>Stop reviewing the same patterns.</h2>
|
177
|
-
<Button href="./docs/getstarted">Start using {siteConfig.title}</Button>
|
178
|
-
</div>
|
179
|
-
);
|
180
|
-
};
|
181
|
-
|
182
|
-
const MainContainer = () => {
|
183
|
-
return (
|
184
|
-
<div className="index-container">
|
185
|
-
<div className="splash-container">
|
186
|
-
<Splash info={siteConfig.splash} />
|
187
|
-
</div>
|
188
|
-
<div className="three-features-container">
|
189
|
-
<Section />
|
190
|
-
<Feature info={siteConfig.featureOne} />
|
191
|
-
<Feature info={siteConfig.featureTwo} />
|
192
|
-
<Feature info={siteConfig.featureThree} />
|
193
|
-
</div>
|
194
|
-
</div>
|
195
|
-
);
|
196
|
-
}
|
197
|
-
|
198
|
-
return (
|
199
|
-
<div>
|
200
|
-
<MainContainer />
|
201
|
-
<Showcase />
|
202
|
-
</div>
|
203
|
-
);
|
204
|
-
}
|
205
|
-
}
|
206
|
-
|
207
|
-
module.exports = Index;
|