diff --git a/README.md b/README.md
index a533318..440e45c 100644
--- a/README.md
+++ b/README.md
@@ -1,82 +1,147 @@
-# goodparts [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/dwyl/good-parts/issues) [![Travis](https://img.shields.io/travis/dwyl/goodparts.svg?maxAge=2592000)](https://travis-ci.org/dwyl/goodparts)
+# `goodparts`
+
+An ESLint Plugin that _only_ allows **JavaScript the _Good_ Parts**
+(_and "**Better Parts**"_) in your code so you can _ship more **reliable code**_.
+
+[![Travis](https://img.shields.io/travis/dwyl/goodparts.svg?maxAge=2592000)](https://travis-ci.org/dwyl/goodparts)
[![dependencies Status](https://david-dm.org/dwyl/goodparts/status.svg)](https://david-dm.org/dwyl/goodparts)
[![devDependencies Status](https://david-dm.org/dwyl/goodparts/dev-status.svg)](https://david-dm.org/dwyl/goodparts?type=dev)
+[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/dwyl/good-parts/issues)
+[![JavaScript Style Guide: Good Parts](https://img.shields.io/badge/code%20style-goodparts-brightgreen.svg?style=flat)](https://github.com/dwyl/goodparts "JavaScript The Good Parts")
+
-An ESLint Style that _only_ allows JavaScript the ***Good Parts*** (*and "Better Parts"*) in your code you can sleep at night.
## *Why?*
-Because this is the _best_ way we know how to write consistent,
-predictable and error free JavaScript code.
+Using JavaScript "**The _Good_ Parts**" (_abreviated to **`"goodparts"`**_)
+is the _best_ way we know
+how to write _simple_, _consistent_,
+_predictable_ and 100% cross-browser-compatible JavaScript code.
-Our ***guiding principal*** is:
+The ***guiding principal*** of `goodparts` is:
> "***perfection*** *is* ***attained*** *not when there is nothing more to add,
> but when there is* ***nothing more to remove***" ~
[Antoine de Saint-Exupéry](http://en.wikiquote.org/wiki/Antoine_de_Saint_Exup%C3%A9ry#Quotes)
-we subscribe to the "_code is for **humans** to read_" idea:
+We _agree_ that "_code is for **humans** to read_":
-> "_**Programs must be written for people to read**, and only incidentally for machines to execute._" ~ Harold Abelson
+> "_**Programs must be written for people to read**,
+and only incidentally for machines to execute._" ~ Harold Abelson
-> "_Any fool can write code that a computer can understand.
+> "_Any fool can write code that a computer can understand.
**Good programmers write code** that **humans** can
**understand**._" ~ Martin Fowler
-Also, we agree with:
-
-> "_**constraints** can actually **boost creativity**_". [Martin Villeneuve](https://www.ted.com/talks/martin_villeneuve_how_i_made_an_impossible_film)
-
The 3 biggest advantages of using `goodparts` in your code:
1. [***Readability***](https://en.wikipedia.org/wiki/Readability) - using _fewer_ ECMAScript (JS) language features means
people reading your code can get to the heart of what it *does*
rather than waste time trying to understand
how its been written.
-2. [***Shoshin***](https://en.wikipedia.org/wiki/Shoshin) - using _fewer_ JS features
-also means a _complete_ beginner has _less_ to learn before
-they _understand_ your code. This is _essential_ in Open Source
-if you want to make something that _anyone_ can use/modify/extend.
-3. [***Portability***](https://en.wikipedia.org/wiki/Software_portability) -
+2. [***Portability***](https://en.wikipedia.org/wiki/Software_portability) -
"Old" Browsers/Devices are a _fact_, even if it's "*only a small percentage*"
of people, we _chose_ to
[*empathize*](http://www.merriam-webster.com/dictionary/empathize)
with them by writing code that ***Works Everywhere***TM.
-
+3. ***Beginner-friendlyness*** or [***Shoshin***](https://en.wikipedia.org/wiki/Shoshin) - using _fewer_ JS features
+also means a _complete_ beginner has _less_ to learn before
+they _understand_ your code. This is _essential_ in Open Source
+if you want to make something that _anyone_ can use/modify/extend.
## *What?*
-A one-line install that will ensure your project's code works everywhere.
-(_or your money back!_)
+`goodparts` is a "[linter](https://en.wikipedia.org/wiki/Lint_%28software%29)"
+that _ensures_ your project's JavaScript code
+only contains the _subset_ of JavaScript known as "**The _Good_ Parts**".
+This _**guarantees**_ that
+your code ***works everywhere***. (_or your money back!_)
+
+
+### What _are_ "**The _Good_ Parts**"
+> If you are _unfamiliar_ with JavaScript "**The _Good_ Parts**"
+or need a _refresher_,
+please see @iteles' notes: [github.com/iteles/Javascript-the-**_Good_**-**Parts**-_**notes**_](https://github.com/iteles/Javascript-the-Good-Parts-notes)
+There are _several_ videos where Douglas Crockford covers
+the Why? What? and How?
+of JavaScript "**The _Good_ Parts**"
+see: https://github.com/dwyl/goodparts/#videos
+
+
## *How?*
-Simply install our configuration
+
+First _install_ the [**NPM Package**](https://www.npmjs.com/package/goodparts)
+in your Node.js/JS project:
```
-$ npm i --save-dev goodparts
+$ npm install goodparts --save-dev
```
-Then you can add the following script to your `package.json`:
+
+Then add the following script to your `package.json`:
+
```json
{
"lint": "node_modules/.bin/goodparts path/to/files/for/linting"
}
```
-The `goodparts` command line tool supports `eslint`'s autofix flag `--fix`. Not all errors can be autofixed, but a great deal can, simply with:
+> Example: [hapi-auth-jwt2/**package.json**#L68](https://github.com/dwyl/hapi-auth-jwt2/blob/5e09733c71c679633de42baa22cef615cdc81859/package.json#L68)
+
+Now when you run the command:
+
+```sh
+npm run lint
+```
+You should _either_ see **no output** if there are **no linting issues** in the code:
+
+![goodparts-no-output-means-it-passes](https://cloud.githubusercontent.com/assets/194400/20865564/fa5307a0-ba0d-11e6-86ce-cbf57fb7bcf7.png)
+
+***or*** if there are **linting issues** in the code you should see:
+
+![goodparts-showing-linting-errors](https://cloud.githubusercontent.com/assets/194400/20865467/09054900-ba0b-11e6-8c4d-1a2ceeea99ae.png)
+
+
+### Autofix
+
+The `goodparts` command line tool supports `eslint`'s autofix flag `--fix`.
+Not _all_ errors can be autofixed, but a great deal can, simply with:
+
```
$ node_modules/.bin/goodparts /path/to/dir --fix
```
-While we're working on an [atom plugin](https://github.com/dwyl/goodparts/issues/243), you can still use `goodparts` to lint your code in your editor using the `linter-eslint` plugin for atom. To do this, you need a `.eslintrc.js` file in your project that reflects the `goodparts` configuration. Luckily we have a command line option for this too! Simply run:
+Example: (_fixing the linting "errors" from the example above_)
+
+![goodparts-autofix](https://cloud.githubusercontent.com/assets/194400/20867636/446500fe-ba41-11e6-811b-3321824ec6b9.png)
+
+> Note: the `--fix` command only fixed the missing semicolon but did not
+delete the extra (_unused_) `auth` variable.
+
+
+### Text Editor Linting _Plugin_?
+
+> If this is a feature you _need_ please _tell_ us by "up-voting":
+[atom plugin feature request](https://github.com/dwyl/goodparts/issues/243)
+
+While we're working on an [atom plugin](https://github.com/dwyl/goodparts/issues/243),
+you can still use `goodparts` to lint your code in your editor using the
+`linter-eslint` plugin for atom. To do this, you need a `.eslintrc.js`
+file in your project that reflects the `goodparts` configuration.
+Luckily we have a command line option for this too!
+
+Simply run:
+
```
$ node_modules/.bin/goodparts /path/to/dir --link
```
-This will create a symlink to the goodparts configuration file at `/path/to/dir/.eslintrc.js`, which we reccommend you git-ignore for now.
+This will create a `symlink` to the goodparts configuration file
+at `/path/to/dir/.eslintrc.js`, which we recommend you add it to `.gitignore` _for now_.
**Pre Commit Hook**
@@ -91,6 +156,20 @@ Then, assuming you have added the `lint` script described above, add the followi
}
```
+## Repo Badge ? [![JavaScript Style Guide: Good Parts](https://img.shields.io/badge/code%20style-goodparts-brightgreen.svg?style=flat)](https://github.com/dwyl/goodparts "JavaScript The Good Parts")
+
+
+If you use `goodparts` to lint your code and want to let other people know,
+you can add this badge in your repo:
+
+```js
+[![JavaScript Style Guide: Good Parts](https://img.shields.io/badge/code%20style-goodparts-brightgreen.svg?style=flat)](https://github.com/dwyl/goodparts "JavaScript The Good Parts")
+
+```
+
+> If you want to know more about "Badges" see: https://github.com/dwyl/repo-badges
+
+
## See the discussion we've had on each issue [here](https://github.com/dwyl/goodparts/wiki/Rules-Contents-page)
@@ -109,7 +188,12 @@ file, so you need to specify your environment e.g:
## Why (_extended version_)
-### Why Should Anyone _Listen_ to Douglas Crockford?
+We _strongly_ agree with the following sentiment/quote:
+
+> "_**constraints** can actually **boost creativity**_". [Martin Villeneuve](https://www.ted.com/talks/martin_villeneuve_how_i_made_an_impossible_film)
+
+
+### _Why_ Should Anyone _Listen_ to `Douglas Crockford`?
There are *many* places you can go to learn JavaScript,
*unsurprisingly* they *all* claim to teach you the "right way",
@@ -122,7 +206,8 @@ learning is any good is by listening to their their peers
or failing that, "*gut feeling*", neither of which are
a *reliable* measure of _quality_.
-Crockford is the Master Yoda of JavaScript, he has truly mastered the craft.
+Crockford is the "[Yoda](https://youtu.be/7YkbgvRMpW0?t=55s)"
+of JavaScript, he has truly [_mastered_](https://en.wikipedia.org/wiki/Mastery_learning) the craft.
He is a member of "[**TC39**](http://tc39wiki.calculist.org/about/people/)"
(the ECMAScript Technical Committee) responsible for
setting the language _standard_ to be implemented by web browser makers;
@@ -234,31 +319,18 @@ https://www.nngroup.com/articles/legibility-readability-comprehension/
-
-### _Should_ We Use ECMAScript 2015 (*AKA "ES6"*)?
-
-When you see someone _trying_ to use ***all*** the
-***latest features*** of **ECMAScript 2015**,
-its clear they are just trying to *look* smart to their peers
-and have not stopped to think/ask:
-+ "_will this code **work everywhere**_?"
-+ "_did the **users** ask me to use this (new) language feature_?
-(_or is there an existing way of doing this reliably...?_)"
-+ "_if I'm just going to transpile this through babel or add a pollyfill
-(for cross-browser compatibility) which means users have to load more bytes of code
-in their browser, what is true the advantage_...?"
-
-
-### Why does this matter / should I care?
+### Why does this matter / should I _care_?
If you are lucky enough to be building an *internal* web app
(*e.g: an intranet or "internal tools") and you "*know*" that
-everyone in the company is using Chrome that's *awesome*,
-thank your lucky stars and enjoy using all the latest & greatest features!
+_**everyone**_ in the company/organisation is using **"_Latest Chrome_"**
+that's *awesome*,
+thank your _lucky stars_ and enjoy using all the latest & greatest features of
+**ES6**!
If, like us, you live in the "*real world*" and build applications/websites
-that need to be *accessible* by and work *consistently* on any device/browser,
-then using only the *goodparts* is a good idea.
+that need to be *accessible* by and work *consistently* on _any_ device/browser,
+then using only the ***`goodparts`*** is a good idea.
> We are ***not suggesting*** that you (*your team/company*) *should*
> (*explicitly*) ***support IE8*** running on Windows XP! (*heavens no!*)
@@ -266,6 +338,28 @@ then using only the *goodparts* is a good idea.
*everywhere* so you don't have to *think* about it.
+### ES2015?
+
+The 6th edition JavaScript, _officially_ known as "**ES6**" or **ECMAScript _2015_**, was finalized in June 2015.
+This update adds significant new syntax for writing complex applications, including classes and modules
+
+https://en.wikipedia.org/wiki/ECMAScript#6th_Edition_-_ECMAScript_2015
+
+#### _Should_ We Use ECMAScript 2015 (*AKA "ES6"*)?
+
+When you see someone _trying_ to use ***all*** the
+***latest features*** of **ECMAScript 2015**,
+
+think/ask:
++ "_will this code **work everywhere**_?"
++ "_did the **users** ask me to use this (new) language feature_?
+(_or is there an `existing` way of doing this reliably...?_)"
++ "_if I'm just going to "**transpile**" this through babel or add a pollyfill
+(for cross-browser compatibility) which means users have to load more bytes of code
+in their browser (so pages take longer to load), what is true the advantage_...?"
+
+
### But caniuse.com says ...
Caniuse.com is a *fantastic* website. The UI is brilliant and for "*informal*"
@@ -297,7 +391,7 @@ please don't take their usage tables as "*gospel*" because they are flawed.
## Browser Stats *Facts*
-Most of us live in a *technology bubble*, we take it for granted
+Most of us live in a *technology bubble*, we take it for _granted_
that we always have Wifi or 4G and assume that because many of our
friends/colleagues are using MacBook Pros or iPhone 6s that
*everyone* is in the same situation.
@@ -325,7 +419,10 @@ they cannot; which means we are *relying* on non-technical people to
and had a person ask "*what is a browser*?" you will know that
*might* take a while...
+If you want to dive a bit deeper into the methodology used by StatCounter see:
+http://www.zdnet.com/article/net-market-share-vs-statcounter-whose-online-measurements-can-you-trust/
+
diff --git a/package.json b/package.json
index 4e40709..17bf1cf 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,15 @@
"description": "An ESLint Style that only allows JavaScript the Good Parts (and \"Better Parts\") in your codebase.",
"version": "1.2.0",
"main": ".eslintrc.js",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/dwyl/goodparts.git"
+ },
+ "license": "GPL-2.0",
+ "bugs": {
+ "url": "https://github.com/dwyl/goodparts/issues"
+ },
+ "homepage": "https://github.com/dwyl/goodparts#readme",
"scripts": {
"test": "tape test/index.js test/**/*.test.js",
"coverage": "istanbul cover tape test/index.js test/**/*.test.js",
@@ -17,12 +26,25 @@
"eslint": "^3.9.1",
"minimist": "^1.2.0"
},
+ "pre-commit": [
+ "lint",
+ "test"
+ ],
"bin": "./bin/cmd.js",
"contributors": [
- "nelsonic",
"eliascodes",
"jrans",
"shouston3",
- "SimonLab"
+ "SimonLab",
+ "JMurphyWeb",
+ "Jbarget",
+ "iteles",
+ "nelsonic"
+ ],
+ "keywords": [
+ "JavaScript The Good Parts",
+ "Good",
+ "Simple",
+ "Less is More"
]
}
diff --git a/rules/es6.js b/rules/es6.js
index b537872..627d5c4 100644
--- a/rules/es6.js
+++ b/rules/es6.js
@@ -28,6 +28,7 @@ module.exports = {
'prefer-spread': 'off',
'prefer-template': 'off',
'require-yield': 'off',
+ 'require-await': 'off', // https://github.com/dwyl/goodparts/issues/277
'rest-spread-spacing': 'off',
'sort-imports': 'off',
'symbol-description': 'off',
diff --git a/rules/stylistic_issues.js b/rules/stylistic_issues.js
index b041f41..466110d 100644
--- a/rules/stylistic_issues.js
+++ b/rules/stylistic_issues.js
@@ -9,6 +9,7 @@ module.exports = {
'comma-style': [2, 'last'], // https://github.com/dwyl/goodparts/issues/215
'comma-spacing': [2, { before: false, after: true }], // https://github.com/dwyl/goodparts/issues/214
'comma-dangle': [2, 'never'], // https://github.com/dwyl/goodparts/issues/213
+ 'capitalized-comments': 0, // https://github.com/dwyl/goodparts/issues/278
'computed-property-spacing': [2, 'never'], // https://github.com/dwyl/goodparts/issues/212
'consistent-this': 0, // https://github.com/dwyl/goodparts/issues/211
'eol-last': 2, // https://github.com/dwyl/goodparts/issues/210
diff --git a/test/fixtures/es6.js b/test/fixtures/es6.js
index ae9db4a..1d60da4 100644
--- a/test/fixtures/es6.js
+++ b/test/fixtures/es6.js
@@ -27,6 +27,7 @@ module.exports = {
'prefer-rest-params': null,
'prefer-spread': null,
'prefer-template': null,
+ 'require-await': null, // https://github.com/dwyl/goodparts/issues/277
'require-yield': null,
'rest-spread-spacing': null,
'sort-imports': null,
diff --git a/test/fixtures/require-await.fail.js b/test/fixtures/require-await.fail.js
new file mode 100644
index 0000000..c050947
--- /dev/null
+++ b/test/fixtures/require-await.fail.js
@@ -0,0 +1,7 @@
+async function foo() {
+ doSomething();
+}
+
+bar(async () => {
+ doSomething();
+});
diff --git a/test/fixtures/require-await.pass.js b/test/fixtures/require-await.pass.js
new file mode 100644
index 0000000..8b33c3b
--- /dev/null
+++ b/test/fixtures/require-await.pass.js
@@ -0,0 +1,18 @@
+async function foo() {
+ await doSomething();
+}
+
+bar(async () => {
+ await doSomething();
+});
+
+function foo() {
+ doSomething();
+}
+
+bar(() => {
+ doSomething();
+});
+
+// Allow empty functions.
+async function noop() {}
diff --git a/test/fixtures/stylistic_issues.js b/test/fixtures/stylistic_issues.js
index 82ff6a8..5103803 100644
--- a/test/fixtures/stylistic_issues.js
+++ b/test/fixtures/stylistic_issues.js
@@ -33,6 +33,7 @@ module.exports = {
pass: ['obj["foo"];']
},
'consistent-this': null,
+ 'capitalized-comments': null, // https://github.com/dwyl/goodparts/issues/278
'eol-last': {
fail: [read('eol.fail')],
pass: [read('eol.pass')]
diff --git a/test/index.js b/test/index.js
index f4cb228..9060306 100644
--- a/test/index.js
+++ b/test/index.js
@@ -26,8 +26,8 @@ function ruleNotConfigured (rule) {
}
test('Testing All Conifgurable Rules', function (t) {
- Object.keys(allRules).forEach(function (rule) {
- var fCases, pCases;
+ Object.keys(allRules).forEach(function check_rule (rule) {
+ var fail_cases, pass_cases;
if (ruleNotConfigured(rule)) {
t.fail(rule + ' not configured');
@@ -41,17 +41,17 @@ test('Testing All Conifgurable Rules', function (t) {
return;
}
- fCases = testObject[rule].fail;
- pCases = testObject[rule].pass;
+ fail_cases = testObject[rule].fail;
+ pass_cases = testObject[rule].pass;
- if (fCases) {
- fCases.forEach(function (text) {
+ if (fail_cases) {
+ fail_cases.forEach(function (text) {
t.notOk(passesRule(rule, text), rule + ' fails');
});
}
- if (pCases) {
- pCases.forEach(function (text) {
+ if (pass_cases) {
+ pass_cases.forEach(function (text) {
t.ok(passesRule(rule, text), rule + ' passes');
});
}