standard
Advanced tools
| <h1 align="center"> | ||
| <a href="https://standardjs.com"><img src="https://cdn.rawgit.com/feross/standard/master/sticker.svg" alt="Standard - JavaScript 代码规范" width="200"></a> | ||
| <br> | ||
| JavaScript Standard Style | ||
| <br> | ||
| <br> | ||
| </h1> | ||
| <p align="center"> | ||
| <a href="https://travis-ci.org/feross/standard"><img src="https://img.shields.io/travis/feross/standard/master.svg" alt="travis"></a> | ||
| <a href="https://www.npmjs.com/package/standard"><img src="https://img.shields.io/npm/v/standard.svg" alt="npm version"></a> | ||
| <a href="https://www.npmjs.com/package/eslint-config-standard"><img src="https://img.shields.io/npm/dm/eslint-config-standard.svg" alt="npm downloads"></a> | ||
| <a href="https://standardjs.com"><img src="https://img.shields.io/badge/code_style-standard-brightgreen.svg" alt="Standard - JavaScript Style Guide"></a> | ||
| </p> | ||
| <h4 align="center">One JavaScript Style to Rule Them All</h4> | ||
| <p align="center"> | ||
| 其他语言: | ||
| <a href="../README.md">English</a>, | ||
| <a href="docs/README-ptbr.md">Português</a>, | ||
| <a href="docs/README-esla.md">Spanish</a>, | ||
| <a href="docs/README-zhtw.md">繁體中文</a> | ||
| </p> | ||
| <br> | ||
| ## JavaScript 代码规范,自带 linter & 代码自动修正 | ||
| 本工具通过以下三种方式为你(及你的团队)节省大量时间: | ||
| - **无须配置。** 史上最便捷的统一代码风格的方式,轻松拥有。 | ||
| - **自动代码格式化。** 只需运行 `standard --fix` 从此和脏乱差的代码说再见。 | ||
| - **提前发现风格及程序问题。** 减少代码审查过程中反反复复的修改过程,节约时间。 | ||
| 无须犹豫。再也不用维护 `.eslintrc`, `.jshintrc`, or `.jscsrc` 。开箱即用。 | ||
| 安装: | ||
| ``` | ||
| npm install standard --save-dev | ||
| ``` | ||
| ## 细则 | ||
| - **使用两个空格** – 进行缩进 | ||
| - **字符串使用单引号** – 需要转义的地方除外 | ||
| - **不再有冗余的变量** – 这是导致 *大量* bug 的源头! | ||
| - **无分号** – [这][1][没什么不好。][2][不骗你!][3] | ||
| - **行首不要以 `(`, `[`, or `` ` `` 开头** | ||
| - 这是省略分号时**唯一**会造成问题的地方 – *工具里已加了自动检测!* | ||
| - [详情][4] | ||
| - **关键字后加空格** `if (condition) { ... }` | ||
| - **函数名后加空格** `function name (arg) { ... }` | ||
| - 坚持使用全等 `===` 摒弃 `==` 一但在需要检查 `null || undefined` 时可以使用 `obj == null`。 | ||
| - 一定要处理 Node.js 中错误回调传递进来的 `err` 参数。 | ||
| - 使用浏览器全局变量时加上 `window` 前缀 – `document` 和 `navigator` 除外 | ||
| - 避免无意中使用到了这些命名看上去很普通的全局变量, `open`, `length`, | ||
| `event` 还有 `name`。 | ||
| - **[查看更多][5]** – *为何不试试 `standard` 规范呢!* | ||
| [1]: http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding | ||
| [2]: http://inimino.org/~inimino/blog/javascript_semicolons | ||
| [3]: https://www.youtube.com/watch?v=gsfbh17Ax9I | ||
| [4]: RULES.md#semicolons | ||
| [5]: RULES.md#javascript-standard-style | ||
| 说了那么多,看看[这个遵循了 Standard 规范的示例文件](https://github.com/expressjs/body-parser/blob/master/index.js) 中的代码吧。或者,这里还有[一大波使用了此规范的项目](https://raw.githubusercontent.com/feross/standard-packages/master/all.json) 代码可供参考。 | ||
| ## 目录 | ||
| - 上手 | ||
| - [安装](#install) | ||
| - [使用](#usage) | ||
| - [如果你聪明的话会这样做](#what-you-might-do-if-youre-clever) | ||
| - FAQ | ||
| - [为何要使用 JavaScript Standard 规范?](#why-should-i-use-javascript-standard-style) | ||
| - [谁在用 JavaScript Standard 规范?](#who-uses-javascript-standard-style) | ||
| - [有现成的编辑器插件吗?](#are-there-text-editor-plugins) | ||
| - [有专属徽章可以用来放到项目的 README 文件中吗?](#is-there-a-readme-badge) | ||
| - [如果我不同意某条规则,可以改吗?](#i-disagree-with-rule-x-can-you-change-it) | ||
| - [毕竟这不是一分正式的 Web 规范啊!](#but-this-isnt-a-real-web-standard) | ||
| - [有自动格式化工具么?](#is-there-an-automatic-formatter) | ||
| - [如何排除某些文件?](#how-do-i-ignore-files) | ||
| - [如何隐藏某类警告?](#how-do-i-hide-a-certain-warning) | ||
| - [使用的三方插件向全局暴露了变量,如何避免 "variable is not defined" 的错误提示?](#i-use-a-library-that-pollutes-the-global-namespace-how-do-i-prevent-variable-is-not-defined-errors) | ||
| - [如何才能使用处于实验阶段的 JavaScript 特性(譬如 ES Next)?](#how-do-i-use-experimental-javascript-es-next-features) | ||
| - [我能使用其他 Javascript 变种吗,例如 Flow?](#can-i-use-a-javascript-language-variant-like-flow) | ||
| - [如何与 Mocha,Jasmine 和 QUnit 这些测试工具搭配工作?](#what-about-mocha-jasmine-qunit-etc) | ||
| - [Web Workers 有考虑过么?](#what-about-web-workers) | ||
| - [Markdown 或者 HTML 文件中的代码能检查到吗?](#can-i-check-code-inside-of-markdown-or-html-files) | ||
| - [有为 git 添加 `pre-commit` 钩子么?](#is-there-a-git-pre-commit-hook) | ||
| - [怎样使输出好看些,带颜色?](#how-do-i-make-the-output-all-colorful-and-pretty) | ||
| - [有相关的 Node.js API 没?](#is-there-a-nodejs-api) | ||
| - [如何参与到 `standard` 规范中来?](#how-do-i-contribute-to-standard) | ||
| - [协议](#license) | ||
| ## 安装 | ||
| 使用本规范最便捷的方式是全局安装,运行: | ||
| ```bash | ||
| $ npm install standard --global | ||
| ``` | ||
| 或者非全局的方式,针对某个项目进行安装: | ||
| ```bash | ||
| $ npm install standard --save-dev | ||
| ``` | ||
| *注意:运行以上命令的前提是已经安装了 [Node.js](http://nodejs.org) 和 [npm](https://npmjs.com) 。* | ||
| ## 使用 | ||
| 安装完就可以开心使用了。最简单的使用场景是检查项目内所有的 JavaScript 文件: | ||
| ```bash | ||
| $ standard | ||
| Error: Use JavaScript Standard Style | ||
| lib/torrent.js:950:11: Expected '===' and instead saw '=='. | ||
| ``` | ||
| 可以跟上 glob 形式的路径参数,但记得带引号以确保 `standard` 工具正确解析,否则会被命令行解析。 | ||
| ```bash | ||
| $ standard "src/util/**/*.js" "test/**/*.js" | ||
| ``` | ||
| **注意:** `standard` 默认查找 `**/*.js`, `**/*.jsx` 所匹配到的文件。 | ||
| ## 如果你聪明的话会这样做 | ||
| 1. 添加配置到 `package.json` | ||
| ```json | ||
| { | ||
| "name": "my-cool-package", | ||
| "devDependencies": { | ||
| "standard": "*" | ||
| }, | ||
| "scripts": { | ||
| "test": "standard && node my-tests.js" | ||
| } | ||
| } | ||
| ``` | ||
| 2. 这样检查工作就会在运行 `npm test` 自动进行 | ||
| ```bash | ||
| $ npm test | ||
| Error: Use JavaScript Standard Style | ||
| lib/torrent.js:950:11: Expected '===' and instead saw '=='. | ||
| ``` | ||
| 3. 从此告别在提 PR 时的代码风格的问题! | ||
| ## 为何要使用 JavaScript Standard 规范? | ||
| 本规范特点之一是简洁。谁也不想为每个项目维护一份有成百上千行语句的代码风格配置文件。有此规范就够了。 | ||
| 本工具通过以下三种方式为你(及你的团队)节省大量时间: | ||
| - **无须配置。** 史上最便捷的统一代码风格的方式,轻松拥有。 | ||
| - **自动的代码格式化。** 只需运行 `standard --fix` 从此和脏乱差的代码说再见。 | ||
| - **提前发现风格及程序问题。** 减少代码审查时的反反复复修改过程,节约时间。 | ||
| 一旦使用 `standard` 规范表明代码的简明性及社区的约定要高于个人的编码风格。这不一定100%适用于所有项目和多元的编程文化,但开源项目代码容易受到新手的影响。把规范讲明,严格执行对于项目的长远维护不无裨益。 | ||
| ## 谁在用 JavaScript Standard 规范? | ||
| 我们是有群众基础的! | ||
| [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/npm.png>](https://www.npmjs.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/github.png>](https://github.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/opbeat.png>](https://opbeat.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/nearform.png>](http://www.nearform.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/brave.png>](https://www.brave.com) | | ||
| |---|---|---|---|---| | ||
| | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/zeit.png>](https://zeit.co) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/zendesk.png>](https://www.zendesk.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/mongodb.jpg>](https://www.mongodb.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/typeform.jpg>](https://www.typeform.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/gov-uk.png>](https://gds.blog.gov.uk) | | ||
| |---|---|---|---|---| | ||
| [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/express.png>](http://expressjs.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/webtorrent.png>](https://webtorrent.io) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/ipfs.png>](https://ipfs.io) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/dat.png>](https://datproject.org) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/bitcoinjs.png>](https://bitcoinjs.org) | | ||
| |---|---|---|---|---| | ||
| [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/atom.png>](https://atom.io) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/electron.png>](http://electron.atom.io) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/voltra.png>](https://voltra.co) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/treasuredata.png>](https://www.treasuredata.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/clevertech.png>](https://clevertech.biz) | | ||
| |---|---|---|---|---| | ||
| [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/studynotes.jpg>](https://www.apstudynotes.org) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/optiopay.png>](https://www.optiopay.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/jaguar-landrover.png>](https://www.jlrtechincubator.com/jlrti/) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/bustle.jpg>](https://www.bustle.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/zentrick.png>](https://www.zentrick.com) | | ||
| |---|---|---|---|---| | ||
| [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/nodesource.png>](https://nodesource.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/greenkeeper.png>](https://greenkeeper.io) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/karma.png>](https://karma-runner.github.io) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/taser.png>](https://www.taser.com) | | ||
| |---|---|---|---| | ||
| 除公司组织外,[很多个人](https://raw.githubusercontent.com/feross/standard-packages/master/all.json)也在项目中使用,这里就不一一罗列了。 | ||
| 并且 `standard` 在 GitHub 的[代码检查类工具](https://github.com/showcases/clean-code-linters) 展示列表中也排名第一。 | ||
| ## 有现成的编辑器插件吗? | ||
| 首先安装 `standard`。剩下的就是不同编译器安装对应的插件: | ||
| ### Sublime Text | ||
| 通过 **[Package Control][sublime-1]**,安装 **[SublimeLinter][sublime-2]** 和 | ||
| **[SublimeLinter-contrib-standard][sublime-3]**。 | ||
| 如果想要保存时自动格式化,还需安装 **[StandardFormat][sublime-4]**。 | ||
| [sublime-1]: https://packagecontrol.io/ | ||
| [sublime-2]: http://www.sublimelinter.com/en/latest/ | ||
| [sublime-3]: https://packagecontrol.io/packages/SublimeLinter-contrib-standard | ||
| [sublime-4]: https://packagecontrol.io/packages/StandardFormat | ||
| ### Atom | ||
| 安装 **[linter-js-standard][atom-1]**。 | ||
| 如果想要保存时自动格式化,还需安装 **[standard-formatter][atom-2]**。安装 **[standardjs-snippets][atom-3]** 可以获得 snippets 特性。 | ||
| [atom-1]: https://atom.io/packages/linter-js-standard | ||
| [atom-2]: https://atom.io/packages/standard-formatter | ||
| [atom-3]: https://atom.io/packages/standardjs-snippets | ||
| ### Visual Studio Code | ||
| 安装 **[vscode-standardjs][vscode-1]**(已经包含了自动格式化)。 | ||
| 安装 **[vscode-standardjs-snippets][vscode-2]** 以获得 JS snippets。安装 **[vscode-react-standard][vscode-3]** 以获得 React snippets。 | ||
| [vscode-1]: https://marketplace.visualstudio.com/items/chenxsan.vscode-standardjs | ||
| [vscode-2]: https://marketplace.visualstudio.com/items?itemName=capaj.vscode-standardjs-snippets | ||
| [vscode-3]: https://marketplace.visualstudio.com/items/TimonVS.ReactSnippetsStandard | ||
| ### Vim | ||
| 安装 **[Syntastic][vim-1]** 并添加如下配置到 `.vimrc`: | ||
| ```vim | ||
| let g:syntastic_javascript_checkers = ['standard'] | ||
| ``` | ||
| 如果想要保存时自动格式化,添加以下配置到 `.vimrc`: | ||
| ```vim | ||
| autocmd bufwritepost *.js silent !standard --fix % | ||
| set autoread | ||
| ``` | ||
| [vim-1]: https://github.com/scrooloose/syntastic | ||
| ### Emacs | ||
| 安装 **[Flycheck][emacs-1]** 后查看 **[manual][emacs-2]** 以了解如何在项目在启用。 | ||
| [emacs-1]: http://www.flycheck.org | ||
| [emacs-2]: http://www.flycheck.org/en/latest/user/installation.html | ||
| ### Brackets | ||
| 插件中搜索 **["Standard Code Style"][brackets-1]** 然后点击 "Install"。 | ||
| [brackets-1]: https://github.com/ishamf/brackets-standard/ | ||
| ### WebStorm (PhpStorm, IntelliJ, RubyMine, JetBrains 等 jetbrains 全家桶系列) | ||
| WebStorm [最近宣布](https://blog.jetbrains.com/webstorm/2017/01/webstorm-2017-1-eap-171-2272/)在其 IDE 中 | ||
| 自带 `standard` 规范。 | ||
| 但是如果你仍然想自己动手配置,[那么请看此教程][webstorm-1]。此教程适用于 JetBrains 全家桶,包括 PhpStorm、IntelliJ、RubyMine 等。 | ||
| [webstorm-1]: docs/webstorm.md | ||
| ## 有专属徽章可以用来放到项目的 README 文件中吗? | ||
| 必需的!如果你的项目使用了 `standard` 规范,可以任选一个下面的徽章放入项目中来进行展示。 | ||
| [](https://github.com/feross/standard) | ||
| ```md | ||
| [](https://github.com/feross/standard) | ||
| ``` | ||
| [](https://standardjs.com) | ||
| ```md | ||
| [](https://standardjs.com) | ||
| ``` | ||
| ## 如果我不同意某条规则,可以改吗? | ||
| 不行。制定这套 `standard` 规范的目的就是让大家都不必再花时间浪费在[无谓的][bikeshedding]代码风格之争上面了。关于缩进该用制表符还是空格这个问题已经争论了很久了,永远也没有答案。争论这个都可以把需求提前写完了。遵循 `standard` 规范,你就不用再犹豫了,毕竟不管怎样争论总归会选择一种风格的。希望大家也能在个人语义和普适价值上做一个权衡。 | ||
| 如果你非要自己去配置成百上千项的 ESLint 规则,那你可以直接使用 | ||
| [eslint-config-standard](https://github.com/feross/eslint-config-standard) 来将个人配置包装在上层。 | ||
| 小贴士:选择 `standard` 然后保持吧。把时间留下来解决其他有意义的问题!\(^____^)/ | ||
| [bikeshedding]: https://www.freebsd.org/doc/en/books/faq/misc.html#bikeshed-painting | ||
| ## 毕竟这不是一分正式的 Web 规范啊! | ||
| 确实!这份规范不隶属于任何官方组织,所以才叫 `feross/standard` 而不是 `ECMA/standard` 嘛。 | ||
| 而 `standard` (标准) 一词在这里不局限于 “web 标准” :-) 。 举个例子: | ||
| - 这个模块帮助我们将代码维持在一个*高的水准(standard of quality)* | ||
| - 这个模块确定项目中的新手遵循一些基本的*样式规范(style standards)* | ||
| ## 有自动格式化工具么? | ||
| 当然!你可以使用 `standard --fix` 来纠正大部分的代码问题。 | ||
| `standard --fix` 可以修正大部分约定俗成的问题,但有些错误(譬如忘记了错误处理)只能手动去修复了。 | ||
| 为了使用方便,`standard` 会在检测到有能够自动被修复的问题的时候,给出相应的提示 "`运行 standard --fix 来自动修正一些问题`"。 | ||
| ## 如何排除某些文件? | ||
| `node_modules/`、`coverage/`、`vendor/`、`*.min.js`、`bundle.js` 这些目录,还有以 `.` 开头的文件(譬如 `.git/`)或者文件夹自动被排除在外。 | ||
| `.gitignore` 里配置的文件也会自动排除掉。 | ||
| 有时你还是需要添加一些自定义的排除文件,可以在 `package.json` 里添加 `standard.ignore` 属性来配置: | ||
| ```json | ||
| "standard": { | ||
| "ignore": [ | ||
| "**/out/", | ||
| "/lib/select2/", | ||
| "/lib/ckeditor/", | ||
| "tmp.js" | ||
| ] | ||
| } | ||
| ``` | ||
| ## 如何隐藏某类警告? | ||
| 很少的情况下你需要绕开 `standard` 以隐藏某些警告信息。 | ||
| JavaScript Standard 代码规范底层使用的是 [ESLint](http://eslint.org/)。所以如果你想隐藏某些警告,方法和使用 ESLint 时一样。 | ||
| 打印详细信息(这样你就能找到你想隐藏的警告在配置中对应的名称了): | ||
| ```bash | ||
| $ standard --verbose | ||
| Error: Use JavaScript Standard Style | ||
| routes/error.js:20:36: 'file' was used before it was defined. (no-use-before-define) | ||
| ``` | ||
| 对某一行禁用**所有规则**: | ||
| ```js | ||
| file = 'I know what I am doing' // eslint-disable-line | ||
| ``` | ||
| 或者,**只禁**用 `"no-use-before-define"` 这条规则: | ||
| ```js | ||
| file = 'I know what I am doing' // eslint-disable-line no-use-before-define | ||
| ``` | ||
| 或者,对**多行**禁用 `"no-use-before-define"` 这一规则: | ||
| ```js | ||
| /* eslint-disable no-use-before-define */ | ||
| console.log('offending code goes here...') | ||
| console.log('offending code goes here...') | ||
| console.log('offending code goes here...') | ||
| /* eslint-enable no-use-before-define */ | ||
| ``` | ||
| ## 使用的三方插件向全局暴露了变量,如何避免 "variable is not defined" 的错误提示? | ||
| 一些三方库(比如 `mocha`)会向全局暴露变量(`describe`、`it`)。这些变量或方法即没有定义,也没有被 `require` 进来,所以 `standard` 会报出变量未定义的警告(这种警告通常情况下是很有用的)。这种情况下我们想对这些全局变量禁用检查。 | ||
| 为了让 `standard` 检测通过(同时也使代码更加易懂),在文件顶部添加如下配置: | ||
| ```js | ||
| /* global myVar1, myVar2 */ | ||
| ``` | ||
| 但如果你需要添加的文件太多,这种方式就显得繁琐了。这种情况下,运行: | ||
| ```bash | ||
| $ standard --global myVar1 --global myVar2 | ||
| ``` | ||
| 或者在 `package.json` 里配置: | ||
| ```json | ||
| { | ||
| "standard": { | ||
| "globals": [ "myVar1", "myVar2" ] | ||
| } | ||
| } | ||
| ``` | ||
| *注意:`global` 和 `globals` 效果一样* | ||
| ## 如何才能使用处于实验阶段的 JavaScript 特性(譬如 ES Next)? | ||
| `standard` 支持最新的 ECMAScript 特性,ES8(ES2017),包括处于 “Stage 4” 仍在提案阶段的特性。 | ||
| 为了支持实验性的特性,`standard` 支持自定义 JavaScript 解析器。添加自定义解析器前请思考一下必要性。 | ||
| 从 npm 安装并使用自定义的解析器(示例:`npm install babel-eslint`): | ||
| ```bash | ||
| $ standard --parser babel-eslint | ||
| ``` | ||
| 或者将其添加到 `package.json` 配置中: | ||
| ```json | ||
| { | ||
| "standard": { | ||
| "parser": "babel-eslint" | ||
| } | ||
| } | ||
| ``` | ||
| 如果全局安装(`npm install standard --global`)了 `standard` 的话,那么请确保 `babel-eslint` 也用 `npm install babel-eslint --global` 全局安装。 | ||
| ## 我能使用其他 Javascript 变种吗,例如 Flow? | ||
| 同样地,想要使用一个 JS 变种之前,先考虑添加和使用它所带来的复杂度看是否值得这么去做。 | ||
| `standard` 支付 ESLint 插件。在 `standard` 处理代码前,使用任何一个插件来将代码编译成合法的 JS 即可。 从 npm 安装一个自定义的解析器 (示例:`npm install eslint-plugin-flowtype`) 然后运行: | ||
| ```bash | ||
| $ standard --plugin flowtype | ||
| ``` | ||
| 或者添加到`package.json`: | ||
| ```json | ||
| { | ||
| "standard": { | ||
| "plugins": [ "flowtype" ] | ||
| } | ||
| } | ||
| ``` | ||
| 如果全局安装(`npm install standard --global`)了 `standard` 的话,那么请确保 `eslint-plugin-flowtype` 也用 `npm install eslint-plugin-flowtype --global` 全局安装。 | ||
| *注意:`plugin` 和 `plugins` 等价* | ||
| ## 如何与 Mocha,Jasmine 和 QUnit 这些测试工具搭配工作? | ||
| 为了能让 mocha 在你的测试文件中工作,将以下配置添加到测试文件头部: | ||
| ```js | ||
| /* eslint-env mocha */ | ||
| ``` | ||
| 或者运行: | ||
| ```bash | ||
| $ standard --env mocha | ||
| ``` | ||
| 上面 `mocha` 也可以是 `jasmine`, `qunit`, `phantomjs` 等同类工具。这里有个来自 ESLint 的完整列表 | ||
| [环境配置](http://eslint.org/docs/user-guide/configuring.html#specifying-environments) | ||
| 文档。环境中所有可用的全局变量可以这个 | ||
| [globals](https://github.com/sindresorhus/globals/blob/master/globals.json) npm 包中查到。 | ||
| *注意: `env` 与 `envs` 用哪个都一样。* | ||
| ## Web Workers 有考虑过么? | ||
| 添加以下注释到文件头部: | ||
| ```js | ||
| /* eslint-env serviceworker */ | ||
| ``` | ||
| 这样可以让 `standard` 知道 `self` 是 web worker 中的全局变量(同时也让人更容易看懂)。 | ||
| ## Markdown 或者 HTML 文件中的代码能检查到吗? | ||
| 可以使用 [`standard-markdown`](https://www.npmjs.com/package/standard-markdown) 来检查 Markdown 里的区位码。 | ||
| 此外,也有 ESLint 插件可以检查 Markdown、HTML 等其他类型文件中的代码: | ||
| 检查 Markdown 文件中的代码,可以用这个 ESLint 插件: | ||
| ```bash | ||
| $ npm install eslint-plugin-markdown | ||
| ``` | ||
| 然后运行以下命令来检查文件代码块中的代码: | ||
| ```bash | ||
| $ standard --plugin markdown '**/*.md' | ||
| ``` | ||
| HTML 文件可以下面这个插件: | ||
| ```bash | ||
| $ npm install eslint-plugin-html | ||
| ``` | ||
| 然后运行以下命令来检查包含在 `<script>` 标签中的代码: | ||
| ```bash | ||
| $ standard --plugin html '**/*.html' | ||
| ``` | ||
| ## 有为 git 添加 `pre-commit` 钩子么? | ||
| 这个问题问得好! | ||
| ```sh | ||
| #!/bin/sh | ||
| # 确保将要提交的所有 JavaScript 代码通过 standard 规范的检查 | ||
| git diff --name-only --cached --relative | grep '\.jsx\?$' | xargs standard | ||
| if [ $? -ne 0 ]; then exit 1; fi | ||
| ``` | ||
| ## 怎样使输出好看些,带颜色? | ||
| 自带的输出信息简洁原始,如果想要炫酷好看,安装 [snazzy](https://www.npmjs.com/package/snazzy): | ||
| ```bash | ||
| $ npm install snazzy | ||
| ``` | ||
| 然后运行: | ||
| ```bash | ||
| $ standard --verbose | snazzy | ||
| ``` | ||
| 还有 [standard-tap](https://www.npmjs.com/package/standard-tap)、 | ||
| [standard-json](https://www.npmjs.com/package/standard-json)、 | ||
| [standard-reporter](https://www.npmjs.com/package/standard-reporter) 和 | ||
| [standard-summary](https://www.npmjs.com/package/standard-summary) 这些类似的工具。 | ||
| ## 有相关的 Node.js API 没? | ||
| 有! | ||
| ### `standard.lintText(text, [opts], callback)` | ||
| 检查传入的 `text`。需要提供一个 `opts` 配置参数: | ||
| ```js | ||
| { | ||
| cwd: '', // 当前工作目录(默认为:process.cwd()) | ||
| filename: '', // 需要检查的文件的路径(可选,虽然有些 eslint 插件需要该参数) | ||
| fix: false, // 是否自动修复问题 | ||
| globals: [], // 声明需要跳过检测的定义全局变量 | ||
| plugins: [], // 自定义的 eslint 插件列表 | ||
| envs: [], // 自定义的 eslint 环境 | ||
| parser: '' // 自定义的 js 解析器(例如 babel-eslint) | ||
| } | ||
| ``` | ||
| 如果 `package.json` 有相应配置也会自动被读取到。 | ||
| 完成后会调用 `callback` 回调并传入 `Error` 和 `results`。 | ||
| 包含结果的 `results` 包含如下属性: | ||
| ```js | ||
| var results = { | ||
| results: [ | ||
| { | ||
| filePath: '', | ||
| messages: [ | ||
| { ruleId: '', message: '', line: 0, column: 0 } | ||
| ], | ||
| errorCount: 0, | ||
| warningCount: 0, | ||
| output: '' // fixed source code (only present with {fix: true} option) | ||
| } | ||
| ], | ||
| errorCount: 0, | ||
| warningCount: 0 | ||
| } | ||
| ``` | ||
| ### `results = standard.lintTextSync(text, [opts])` | ||
| `standard.lintText()` 的同步版本。如果运行出错,会抛出异常。否则返回 `results`。 | ||
| ### `standard.lintFiles(files, [opts], callback)` | ||
| 检查以 glob 形式指定的 `files` 参数所匹配到的所有文件。可以传入一个 `opts` 配置参数: | ||
| ```js | ||
| var opts = { | ||
| ignore: [], // glob 形式的排除列表 (一般无须配置) | ||
| cwd: '', // 当前工作目录(默认为:process.cwd()) | ||
| fix: false, // 是否自动修复问题 | ||
| globals: [], // 声明需要跳过检测的定义全局变量 | ||
| plugins: [], // eslint 插件列表 | ||
| envs: [], // eslint 环境 | ||
| parser: '' // js 解析器(例如 babel-eslint) | ||
| } | ||
| ``` | ||
| 回调同上。 | ||
| ## 如何参与到 `standard` 规范中来? | ||
| 欢迎参与进来!逛逛 [issues](https://github.com/feross/standard/issues) 或者 [PRs](https://github.com/feross/standard/pulls) 页面,如果发现没有找到想要的问题可以自己提一个。 | ||
| 来 freenode 的 `#standard` 频道与其他人一起聊天讨论! | ||
| 以下是一些 `standard` 生态里比较重要的包: | ||
| - **[standard](https://github.com/feross/standard)** - 本仓库 | ||
| - **[standard-engine](https://github.com/flet/standard-engine)** - 一个 eslint 命令行引擎 | ||
| - **[eslint-config-standard](https://github.com/feross/eslint-config-standard)** -standard 规范的 eslint 检查器 | ||
| - **[eslint-config-standard-jsx](https://github.com/feross/eslint-config-standard-jsx)** - standard (JSX) 的 eslint 规范 | ||
| - **[eslint-plugin-standard](https://github.com/xjamundx/eslint-plugin-standard)** - standard 规范自定义的 eslint 规则(不在 eslint 核心规则里面) | ||
| - **[eslint](https://github.com/eslint/eslint)** - standard 基于它来实现的 | ||
| - **[snazzy](https://github.com/feross/snazzy)** - 美化输出 | ||
| - **[standard-www](https://github.com/feross/standard-www)** - https://standardjs.com 站点的源码 | ||
| - **[semistandard](https://github.com/Flet/semistandard)** - standard 规范带逗号的版本(如果你需要的话) | ||
| 还有很多 **[编辑器插件](#text-editor-plugins)**、一个 | ||
| **[使用 `standard` 规范开发的 npm 包](https://github.com/feross/standard-packages)**的列表、还有一分非常棒的**[ `standard` 生态中所使用到的包](https://github.com/feross/awesome-standard)**的列表。 | ||
| ## 协议 | ||
| [MIT](LICENSE). Copyright (c) [Feross Aboukhadijeh](http://feross.org). |
+1
-0
@@ -92,3 +92,4 @@ # Authors | ||
| - Thomas Watson (w@tson.dk) | ||
| - Pablo Varela (pablopunk@users.noreply.github.com) | ||
| #### Generated by bin/update-authors.sh. |
+7
-0
@@ -6,2 +6,9 @@ # Change Log | ||
| ## 10.0.2 - 2017-04-14 | ||
| ### Changed rules | ||
| - Relax rule: Disallow import of modules using absolute paths ([import/no-absolute-path](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-absolute-path.md)) [#861](https://github.com/feross/standard/issues/861) | ||
| - This rule was responsible for up to 25% of the running time of `standard`, so we are disabling it until its performance improves. | ||
| ## 10.0.1 - 2017-04-06 | ||
@@ -8,0 +15,0 @@ |
+92
-90
@@ -22,3 +22,4 @@ <h1 align="center"> | ||
| <a href="README-ptbr.md">Português</a>, | ||
| <a href="README-zhtw.md">繁體中文</a> | ||
| <a href="README-zhtw.md">繁體中文</a>, | ||
| <a href="README-zhcn.md">简体中文</a> | ||
| </p> | ||
@@ -49,16 +50,16 @@ | ||
| - **2 espacios** como sangría. | ||
| - **Usar comillas simples en cadenas de texto** con la excepcion de escapado de texto | ||
| - **Usar comillas simples en cadenas de texto** con la excepción de escapado de texto | ||
| - **No dejar variables sin usar** – esta captura *toneladas* de bugs! | ||
| - **Sin punto y coma** – [Esta][1] [bien.][2] [En serio!][3] | ||
| - **Sin punto y coma** – [Está][1] [bien.][2] [¡En serio!][3] | ||
| - **Nunca empezar una línea con `(`, `[`, o `` ` ``** | ||
| - Este es ul **unico** problema al evitar punto y coma – *automaticamente verificado para ti!* | ||
| - Este es el **único** problema al evitar punto y coma – *automáticamente verificado para ti!* | ||
| - [Más detalles][4] | ||
| - **Espacio después de las palabras claves** `if (condition) { ... }` | ||
| - **Espacio después del nombre de función** `function name (arg) { ... }` | ||
| - Usar siempre `===` en vez de `==` – pero `obj == null` esta permitido para verificar `null || undefined`. | ||
| - Usar siempre `===` en vez de `==` – pero `obj == null` está permitido para verificar `null || undefined`. | ||
| - Gestionar siempre el parámetro de función `err` de node.js | ||
| - Usar siempre el prefijo `window` en los globales del navegador – A excepción de `document` y `navigator` esto esta bien | ||
| - Previene uso accidental de mal-llamados globales del navegador como `open`, `length`, | ||
| - Usar siempre el prefijo `window` en los globales del navegador – A excepción de `document` y `navigator` esto está bien | ||
| - Previene el uso accidental de mal-llamados globales del navegador como `open`, `length`, | ||
| `event`, y `name`. | ||
| - **Y [mucho mas][5]** – *prueba `standard` hoy mismo!* | ||
| - **Y [mucho más][5]** – *prueba `standard` hoy mismo!* | ||
@@ -79,26 +80,28 @@ [1]: http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding | ||
| - Inicio Rapido | ||
| - Inicio Rápido | ||
| - [Instalación](#instalación) | ||
| - [Uso](#uso) | ||
| - [Lo que podrias hacer si eres inteligente](#lo-que-prodias-hacer-si-eres-inteligente) | ||
| - [Lo que podrías hacer si eres inteligente](#lo-que-podrías-hacer-si-eres-inteligente) | ||
| - FAQ | ||
| - [¿Porque deberia usar JavaScript Standard Style?](#porque-deberia-usar-javascript-standard-style) | ||
| - [¿Quien usa JavaScript Standard Style?](#quien-usa-javascript-standard-style) | ||
| - [¿Por qué debería usar JavaScript Standard Style?](#por-qué-deberia-usar-javascript-standard-style) | ||
| - [¿Quién usa JavaScript Standard Style?](#quién-usa-javascript-standard-style) | ||
| - [¿Hay plugins para editores de textos?](#hay-plugins-para-editores-de-textos) | ||
| - [¿Hay alguna medalla para al readme?](#hay-alguna-medalla-para-al-readme) | ||
| - [No estoy de acuerdo con la regla X, ¿lo puedes cambiar?](#no-estoy-de-acuerdo-con-la-regla-x-lo-puedo-cambiar) | ||
| - [No estoy de acuerdo con la regla X, ¿la puedo cambiar?](#no-estoy-de-acuerdo-con-la-regla-x-la-puedo-cambiar) | ||
| - [¡Pero esto no un estandar web real!](#pero-esto-no-un-estandar-web-real) | ||
| - [¿Hay algún formateador automatico?](#hay-algún-formateador-automatico) | ||
| - [¿Como hago para ignorar archivos?](#como-hago-para-ignorar-archivos) | ||
| - [¿Como oculto cierta alerta?](#como-oculto-cierta-alerta) | ||
| - [Yo uso una librería que contamina el espacio de nombres global. ¿Como puedo evitar los errores "variable is not defined"?](#yo-uso-una-librería-que-contamina-el-espacio-de-nombres-global-como-puedo-evitar-los-errores--variable-is-not-defined) | ||
| - [¿Hay algún formateador automático?](#hay-algún-formateador-automático) | ||
| - [¿Cómo hago para ignorar archivos?](#cómo-hago-para-ignorar-archivos) | ||
| - [¿Cómo oculto cierta alerta?](#cómo-oculto-cierta-alerta) | ||
| - [Yo uso una librería que contamina el espacio de nombres global. ¿Cómo puedo evitar los errores "variable is not defined"?](#yo-uso-una-librería-que-contamina-el-espacio-de-nombres-global-cómo-puedo-evitar-los-errores--variable-is-not-defined) | ||
| - [¿Puedo usar un parser JavaScript que soporte ES última-generación?](#puedo-usar-un-parser-javascript-que-soporte-es-última-generación) | ||
| - [¿Puedo usar una variación de lenguaje JavaScript, como Flow?](#puedo-usar-una-variación-de-lenguaje-javascript-como-flow) | ||
| - [¿Que acerca de Mocha, Jasmine, QUnit y etc?](#que-acerca-de-mocha-jasmine-qunit-y-etc) | ||
| - [¿Que acerca de Web Workers?](#que-acerca-de-web-workers) | ||
| - [¿Puedo verificar codigo dentro de archivos Markdown o HTML?](#puedo-verificar-codigo-dentro-de-archivos-markdown-o-html) | ||
| - [¿Qué pasa con Mocha, Jasmine, QUnit y etc?](#qué-pasa-con-mocha-jasmine-qunit-y-etc) | ||
| - [¿Qué pasa con Web Workers?](#qué-pasa-con-web-workers) | ||
| - [¿Puedo verificar código dentro de archivos Markdown o HTML?](#puedo-verificar-codigo-dentro-de-archivos-markdown-o-html) | ||
| - [¿Hay algún gancho git `pre-commit`?](#hay-algún-gancho-git-pre-commit) | ||
| - [¿Como hago la salida (output) todo colorido y *bonito*?](#como-hago-la-salida-output-todo-colorido-y-bonito) | ||
| - [¿Cómo hago la salida (output) toda colorida y *bonita*?](#cómo-hago-la-salida-output-toda-colorida-y-bonita) | ||
| - [Node.js API](#nodejs-api) | ||
| - [¿Como puedo contribuir a `standard`?](#como-puedo-contribuir-a-standard) | ||
| - [¿Cómo puedo contribuir a `standard`?](#cómo-puedo-contribuir-a-standard) | ||
| - [Licencia](#licencia) | ||
@@ -108,3 +111,3 @@ | ||
| La manera más fácil de usar JavaScript Standard Style es instalarlo globalmente como un programa de linea de comandos de Node. Ejecuta el siguiente comando en la terminal: | ||
| La manera más fácil de usar JavaScript Standard Style es instalarlo globalmente como un programa de línea de comandos de Node. Ejecuta el siguiente comando en la terminal: | ||
@@ -125,3 +128,3 @@ ```bash | ||
| Una vez tenga instalado `standard`, ya deberías poder usar `standard`. Un simple caso de uso podría ser chequear estilos de todos los archivos JavaScript en el directorio actual: | ||
| Una vez tenga instalado `standard`, ya deberías poder usar `standard`. Un simple caso de uso podría ser comprobar estilos de todos los archivos JavaScript en el directorio actual: | ||
@@ -142,6 +145,6 @@ ```bash | ||
| **Nota:** Por defecto `standard` buscará todos los archivos que hagan pareo con los patrones: | ||
| **Nota:** Por defecto `standard` buscará todos los archivos que concuerden con los patrones: | ||
| `**/*.js`, `**/*.jsx`. | ||
| ## Lo que podrias hacer si eres inteligente | ||
| ## Lo que podrías hacer si eres inteligente | ||
@@ -162,3 +165,3 @@ 1. Agregar esto `package.json` | ||
| 2. Los estilos son chequeados automaticamente cuando ejecutes `npm test` | ||
| 2. Los estilos son comprobados automáticamente cuando ejecutes `npm test` | ||
@@ -171,5 +174,5 @@ ``` | ||
| 3. No volver a dar feedback de stilos un PR otra vez! | ||
| 3. No vuelvas a dar feedback de estilos en una PR jamás! | ||
| ## ¿Porque deberia usar JavaScript Standard Style? | ||
| ## ¿Por qué deberia usar JavaScript Standard Style? | ||
@@ -179,19 +182,19 @@ La belleza de JavaScript Standard Style es qué es simple. | ||
| de cientos de líneas para cada módulo/proyecto en los que trabajan. | ||
| ¡Es suficiente de esta locura! | ||
| ¡Se acabó esta locura! | ||
| Este modulo te ahorra tiempo a ti (y otros) en tres maneras: | ||
| Este módulo te ahorra tiempo a ti (y otros) en tres maneras: | ||
| - **Sin configuración.** La manera mas fácil de usar estilos consistentes | ||
| en tu proyecto. | ||
| - **Automaticamente formatea el código.** Ejecuta `standard --fix` y dile adios a las | ||
| - **Automáticamente formatea el código.** Ejecuta `standard --fix` y dile adios a las | ||
| inconsistencias en tu código. | ||
| - **De manera temprana captura problemas de estilos y errores de programador.** Te ahorras el tiempo | ||
| - **Captura problemas de estilos y errores del programador muy pronto.** Te ahorras el tiempo | ||
| de hacer revisiones de código eliminando inconsistencias entre el dueño del | ||
| repositorio y los contribuidores. | ||
| Adoptar estilos `standard` significa clasificar la importancia de la claridad del código y las convenciones de la comunidad mucho más que estilo personal. Esto quizás no tenga sentido para el 100% de proyectos y culturas de desarrollo, aunque proyectos de código abierto pueden llegar a ser hostiles para los novatos. Estableciendo expectativas de contribución limpia y automatizada puede hacer el proyecto más saludable. | ||
| Adoptar estilos `standard` significa clasificar la importancia de la claridad del código y las convenciones de la comunidad mucho más que estilo personal. Esto quizás no tenga sentido para el 100% de proyectos y culturas de desarrollo, pero los proyectos de código abierto pueden llegar a ser hostiles para los novatos. Estableciendo expectativas de contribución limpia y automatizada puede hacer el proyecto más saludable. | ||
| ## ¿Quien usa JavaScript Standard Style? | ||
| ## ¿Quién usa JavaScript Standard Style? | ||
| Un monton de gente! | ||
| Un montón de gente! | ||
@@ -216,7 +219,7 @@ [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/npm.png>](https://www.npmjs.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/github.png>](https://github.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/opbeat.png>](https://opbeat.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/nearform.png>](http://www.nearform.com) | [<img width=150 src=https://cdn.rawgit.com/feross/standard/master/docs/logos/brave.png>](https://www.brave.com) | | ||
| Adicionalmente a compañias, muchos miembros de la comunidad usan `standard` en modulos que son | ||
| [muy numerosos](https://raw.githubusercontent.com/feross/standard-packages/master/all.json) para listar aqui. | ||
| Adicionalmente a compañías, muchos miembros de la comunidad usan `standard` en modulos que son | ||
| [muy numerosos](https://raw.githubusercontent.com/feross/standard-packages/master/all.json) para listar aquí. | ||
| También `standard` es el linter con mas estrellas en GitHub | ||
| [Clean Code Linter](https://github.com/showcases/clean-code-linters) un caso. | ||
| También `standard` es el linter con más estrellas en GitHub | ||
| [Clean Code Linter](https://github.com/showcases/clean-code-linters). | ||
@@ -232,3 +235,3 @@ ## ¿Hay plugins para editores de textos? | ||
| Para formateo automatico al guardar, instale **[StandardFormat][sublime-4]**. | ||
| Para formateo automático al guardar, instale **[StandardFormat][sublime-4]**. | ||
@@ -244,3 +247,3 @@ [sublime-1]: https://packagecontrol.io/ | ||
| Para formateo automatico al guardar, instale **[standard-formatter][atom-2]**. Para snippets, | ||
| Para formateo automático al guardar, instale **[standard-formatter][atom-2]**. Para snippets, | ||
| instale **[standardjs-snippets][atom-3]**. | ||
@@ -254,3 +257,3 @@ | ||
| Instale **[vscode-standardjs][vscode-1]**. (Incluye soporte para formateo automatico.) | ||
| Instale **[vscode-standardjs][vscode-1]**. (Incluye soporte para formateo automático.) | ||
@@ -266,3 +269,3 @@ Para snippets JS, instale: **[vscode-standardjs-snippets][vscode-2]**. | ||
| instale **[Syntastic][vim-1]** y agregue esta linea a su `.vimrc`: | ||
| instale **[Syntastic][vim-1]** y agregue esta línea a su `.vimrc`: | ||
@@ -273,3 +276,3 @@ ```vim | ||
| Para formateo automatico al guardar, agregue estas dos linea a su `.vimrc`: | ||
| Para formateo automático al guardar, agregue estas dos líneas a su `.vimrc`: | ||
@@ -301,3 +304,3 @@ ```vim | ||
| Si aun prefieres configurar `standard` manualmente [sigue esta guia](webstorm-2). Esto aplica a todos los productos de JetBrains, incluyendo PhpStorm, IntelliJ, RubyMine y etc. | ||
| Si aun prefieres configurar `standard` manualmente [sigue esta guia](webstorm-2). Esto se aplica a todos los productos de JetBrains, incluyendo PhpStorm, IntelliJ, RubyMine y etc. | ||
@@ -324,5 +327,5 @@ [webstorm-1]: https://www.jetbrains.com/webstorm/ | ||
| ## No estoy de acuerdo con la regla X, ¿lo puedo cambiar? | ||
| ## No estoy de acuerdo con la regla X, ¿la puedo cambiar? | ||
| No. El punto de `standard` es de evitar [bikeshedding][bikeshedding] acerca del estilo. Existen un montón de debates online acerca de tabs vs espacios, etc. que nunca serán resueltos. Estos debates solo distraen de hacer el trabajo. Al final del dia tienes simplemente que “usar alguno”, y esa es toda la filosofía de `standard` -- es un montón de sensibles opiniones de “usar alguno”. Con la esperanza que los usuarios vean el valor en esto más que defender sus propias opiniones. | ||
| No. El objetivo de `standard` es evitar [bikeshedding][bikeshedding] en el estilo. Existen un montón de debates online acerca de tabs vs espacios, etc. que nunca serán resueltos. Estos debates solo te distraen de hacer tu trabajo. Al final del día tienes simplemente que “usar alguno”, y esa es toda la filosofía de `standard` -- es un montón de sensibles opiniones de “usar alguno”. Con la esperanza que los usuarios vean el valor en esto más que defender sus propias opiniones. | ||
@@ -332,3 +335,3 @@ Si realmente quieres configurar cientos de reglas individualmente, puedes usar `eslint` directamente con [eslint-config-standard](https://github.com/feross/eslint-config-standard) aplicando | ||
| Tip: ¡Simplemente usa `standard` y ya esta. Existen problemas reales | ||
| Tip: ¡Simplemente usa `standard` y ya está. Existen problemas reales | ||
| en los cuales debes usar tu tiempo! :P | ||
@@ -340,15 +343,14 @@ | ||
| ¡Por su puesto que no lo es! El estilo aqui no esta afiliado a ningún grupo oficial de estándar web, es por eso que este repositorio se llama `feross/standard` y no `ECMA/standard`. | ||
| ¡Por su puesto que no lo es! Este estilo no está afiliado a ningún grupo oficial de estándar web, por eso este repositorio se llama `feross/standard` y no `ECMA/standard`. | ||
| La palabra “estándar” tiene más significados que solo “estándar web” :-) Por ejemplo: | ||
| - Este módulo ayuda a mantener el código a la más alta *calidad estandar*. | ||
| - Este módulo asegura que las nuevas contribuciones sigan los *estilos estandar* básicos. | ||
| - Este módulo ayuda a mantener el código a la más alta *calidad estándar*. | ||
| - Este módulo asegura que las nuevas contribuciones sigan los *estilos estándar* básicos. | ||
| ## ¿Hay algún formateador automatico? | ||
| ## ¿Hay algún formateador automático? | ||
| ¡Si! Puedes usar `standard --fix` para arreglar la mayoría de problemas automáticamente. | ||
| ¡Sí! Puedes usar `standard --fix` para arreglar la mayoría de problemas automáticamente. | ||
| `standard --fix` esta integrado en `standard` (desde v8.0.0) para máxima conveniencia. | ||
| `standard --fix` está integrado en `standard` (desde v8.0.0) para máxima conveniencia. | ||
| La mayoría de los problemas se arreglan, pero algunos errores (olvidar gestionar errores en callbacks) deben ser arreglados manualmente. | ||
@@ -359,3 +361,3 @@ | ||
| ## ¿Como hago para ignorar archivos? | ||
| ## ¿Cómo hago para ignorar archivos? | ||
@@ -366,3 +368,3 @@ Ciertas rutas (`node_modules/`, `coverage/`, `vendor/`, `*.min.js`, `bundle.js`, y archivos/directorios que empiezan con `.` cómo `.git`) son ignorados automáticamente. | ||
| Algunas veces necesitas ignorar directorios o archivos específicos. Para hacerlo, agrega la propiedad `standard.ignore` al `package.json`: | ||
| A veces necesitas ignorar directorios o archivos específicos. Para hacerlo, agrega la propiedad `standard.ignore` al `package.json`: | ||
@@ -380,7 +382,7 @@ ```json | ||
| ## ¿Como oculto cierta alerta? | ||
| ## ¿Cómo oculto cierta alerta? | ||
| En raros casos, necesitarás romper una regla y ocultar la alerta generada por `standard`. | ||
| JavaScript Standard Style usa [ESLint](http://eslint.org/) bajo la capucha y puedes ocultar las alertas como normalmente lo harias si usaras ESLint directamente. | ||
| JavaScript Standard Style usa [ESLint](http://eslint.org/) bajo la capucha y puedes ocultar las alertas como normalmente lo harías si usaras ESLint directamente. | ||
@@ -417,7 +419,7 @@ Para obtener una salida mas especifica (así puedes encontrar el nombre de la regla a ignorar) ejecute: | ||
| ## Yo uso una librería que contamina el espacio de nombres global. ¿Como puedo evitar los errores "variable is not defined"? | ||
| ## Yo uso una librería que contamina el espacio de nombres global. ¿Cómo puedo evitar los errores "variable is not defined"? | ||
| Algunos paquetes (ej `mocha`) colocan sus funciones (ej: `describe`, `it`) en el objeto global (¡mala manera!). Como estas funciones no están definidas o requeridas (ej: `require`) en ningún lugar del código, `standard` te alertara que están usando una variable que no está definida (usualmente, esta regla es realmente útil para detectar errores de tipeo). Pero queremos inhabilitar estas variables globales. | ||
| Para hacerle a `standard` (como también humanos que leen tu código) saber que ciertas variables son globales en tu código, agregar esto en la parte superior de tu código: | ||
| Para hacerle saber a `standard` (como también a los humanos que leen tu código) que ciertas variables son globales en tu código, agregar esto en la parte superior de tu código: | ||
@@ -447,3 +449,3 @@ ```js | ||
| ## ¿Como Puedo usar características experimentales JavaScript (ES Next)? | ||
| ## ¿Cómo puedo usar características experimentales JavaScript (ES Next)? | ||
@@ -453,5 +455,5 @@ `standard` soporta las ultimas características de ECMAscript, ES8 (ES2017) incluyendo todas las características del lenguaje | ||
| Para soportar características experimentales del lenguaje, `standard` soporta especificando un parser JS customizado. Antes que uses un parser customizado, considera siquiera la complejidad agregada vale la pena. | ||
| Para soportar características experimentales del lenguaje, `standard` soporta especificar un parser JS customizado. Antes de que uses un parser customizado, considera si la complejidad agregada vale la pena. | ||
| Para usar un parser customizado, instálelo desde npm (ejemplo: `npm install babel-eslint`) y ejecute esto: | ||
| Para usar un parser customizado, instálalo desde npm (ejemplo: `npm install babel-eslint`) y ejecuta esto: | ||
@@ -462,3 +464,3 @@ ```bash | ||
| O, agregue esto a `package.json`: | ||
| O, agrega esto a `package.json`: | ||
@@ -473,11 +475,11 @@ ```json | ||
| Si `standard` esta instalado globalmente (ej: `npm install standard --global`), entonces asegurese de instalar `babel-eslint` globalmente también com `npm install babel-eslint --global`. | ||
| Si `standard` está instalado globalmente (ej: `npm install standard --global`), entonces asegúrate de instalar `babel-eslint` globalmente también com `npm install babel-eslint --global`. | ||
| ## ¿Puedo usar una variación de lenguaje JavaScript, como Flow? | ||
| Antes de usar una variable del lenguaje JavaScript customizado, considere si la complejidad agregada | ||
| Antes de usar una variable del lenguaje JavaScript customizado, considera si la complejidad agregada | ||
| (y esfuerzo requerido para obtener los contribuidores alcanzarle con rapidez) vale la pena. | ||
| `standard` soporta plugins ESLint. Usa uno de estos para transformar el código a javascript válido antes de que `standard` lo vea. Para usar un parser customizado, instálelo desde | ||
| npm (example: `npm install eslint-plugin-flowtype`) y ejecute: | ||
| `standard` soporta plugins ESLint. Usa uno de estos para transformar el código a javascript válido antes de que `standard` lo vea. Para usar un parser customizado, instálalo desde | ||
| npm (example: `npm install eslint-plugin-flowtype`) y ejecuta: | ||
@@ -488,3 +490,3 @@ ```bash | ||
| O, agrege esto a `package.json`: | ||
| O, agrega esto a `package.json`: | ||
@@ -502,9 +504,9 @@ ```json | ||
| Si `standard` esta instalado globalmente (ej: `npm install standard --global`), entonces asegurese d instalar `eslint-plugin-flowtype` globalmente también, con `npm install eslint-plugin-flowtype -g`. | ||
| Si `standard` está instalado globalmente (ej: `npm install standard --global`), entonces asegúrate de instalar `eslint-plugin-flowtype` globalmente también, con `npm install eslint-plugin-flowtype -g`. | ||
| *Nota: `plugin` y `plugins` son equivalentes* | ||
| ## ¿Que acerca de Mocha, Jasmine, QUnit y etc? | ||
| ## ¿Qué pasa con Mocha, Jasmine, QUnit y etc? | ||
| Para soportar mocha in tus archivos de prueba, agrega esto al inicio de los archivos: | ||
| Para soportar mocha en tus archivos de tests, agrega esto al inicio de los archivos: | ||
@@ -515,3 +517,3 @@ ```js | ||
| O, ejecute: | ||
| O, ejecuta: | ||
@@ -522,9 +524,9 @@ ```bash | ||
| Donde `mocha` puede ser uno de `jasmine`, `qunit`, `phantomjs`, y asi sucesivamente. | ||
| Para ver la lista completa, chequear la documentación de ESLint [especificando entornos](http://eslint.org/docs/user-guide/configuring.html#specifying-environments). | ||
| Por una lista de qué variables globales están disponibles en estos entornos chequea el modulo npm [globals](https://github.com/sindresorhus/globals/blob/master/globals.json) npm | ||
| Donde `mocha` puede ser `jasmine`, `qunit`, `phantomjs`, y así sucesivamente. | ||
| Para ver la lista completa, comprueba la documentación de ESLint [especificando entornos](http://eslint.org/docs/user-guide/configuring.html#specifying-environments). | ||
| Para una lista de qué variables globales están disponibles en estos entornos comprueba el módulo npm [globals](https://github.com/sindresorhus/globals/blob/master/globals.json). | ||
| *Nota: `env` y `envs` son equivalentes* | ||
| ## ¿Que acerca de Web Workers? | ||
| ## ¿Qué pasa con Web Workers? | ||
@@ -537,6 +539,6 @@ Agrega esto al inicio de tus archivos: | ||
| Esto le hara saber a` standard` (como también humanos que leen tu código) que | ||
| Esto le hará saber a` standard` (como también humanos que leen tu código) que | ||
| `self` es una variable global en el codigo web worker. | ||
| ## ¿Puedo verificar codigo dentro de archivos Markdown o HTML? | ||
| ## ¿Puedo verificar código dentro de archivos Markdown o HTML? | ||
@@ -548,3 +550,3 @@ Para verificar código dentro de archivos Markdown use [`standard-markdown`](https://www.npmjs.com/package/standard-markdown). | ||
| Para verificar código dentro de archivos Markdown, use el plugin ESLint: | ||
| Para verificar código dentro de archivos Markdown, usa el plugin ESLint: | ||
@@ -555,3 +557,3 @@ ```bash | ||
| Luego para verificar codigo JS que aparece dentro de bloques código, ejecute: | ||
| Luego para verificar código JS que aparece dentro de bloques código, ejecute: | ||
@@ -576,3 +578,3 @@ ```bash | ||
| Funny you should ask! | ||
| ¡Qué bien que lo preguntes! | ||
@@ -587,3 +589,3 @@ ```sh | ||
| ## ¿Como hago la salida (output) todo colorido y *bonito*? | ||
| ## ¿Cómo hago la salida (output) toda colorida y *bonita*? | ||
@@ -602,3 +604,3 @@ La salida integrada es simple y directa, pero si te gustan las cosas brillantes, puedes instalar [snazzy](https://www.npmjs.com/package/snazzy): | ||
| También esta [standard-tap](https://www.npmjs.com/package/standard-tap), | ||
| También tienes [standard-tap](https://www.npmjs.com/package/standard-tap), | ||
| [standard-json](https://www.npmjs.com/package/standard-json), | ||
@@ -646,3 +648,3 @@ [standard-reporter](https://www.npmjs.com/package/standard-reporter), y | ||
| Hacer Lint a los archivos que hagan pareo con el patrón globs. | ||
| Hacer Lint a los archivos que concuerden con el patrón globs. | ||
| Un objeto `opts` puede ser proporcionado: | ||
@@ -664,5 +666,5 @@ | ||
| ## ¿Como puedo contribuir a `standard`? | ||
| ## ¿Cómo puedo contribuir a `standard`? | ||
| Contribuciones son bienvenidas! Chequea los [issues](https://github.com/feross/standard/issues) o [PRs](https://github.com/feross/standard/pulls), o has el tuyo propio si quieres algo que nos ves allí | ||
| Las contribuciones son bienvenidas! Comprueba los [issues](https://github.com/feross/standard/issues) o [PRs](https://github.com/feross/standard/pulls), o haz el tuyo propio si quieres algo que nos ves allí | ||
@@ -681,3 +683,3 @@ Unete a nosotros `#standard` en freenode. | ||
| También hay un monton **[plugins editores de textos](#plugins-editores-de-textos)**, una lista de | ||
| También hay un montón **[plugins editores de textos](#plugins-editores-de-textos)**, una lista de | ||
| **[paquetes npm que usan `standard`](https://github.com/feross/standard-packages)**, | ||
@@ -684,0 +686,0 @@ y una impresionante lista de |
@@ -22,3 +22,4 @@ <h1 align="center"> | ||
| <a href="README-esla.md">Spanish</a>, | ||
| <a href="README-zhtw.md">繁體中文</a> | ||
| <a href="README-zhtw.md">繁體中文</a>, | ||
| <a href="README-zhcn.md">简体中文</a> | ||
| </p> | ||
@@ -25,0 +26,0 @@ |
@@ -20,5 +20,6 @@ <h1 align="center"> | ||
| 翻譯: | ||
| <a href="../README.md">English</a>、 | ||
| <a href="README-ptbr.md">Português</a>、 | ||
| <a href="README-esla.md">Spanish</a> | ||
| <a href="../README.md">English</a>, | ||
| <a href="README-ptbr.md">Português</a>, | ||
| <a href="README-esla.md">Spanish</a>, | ||
| <a href="README-zhcn.md">简体中文</a> | ||
| </p> | ||
@@ -25,0 +26,0 @@ |
+30
-34
@@ -13,3 +13,3 @@ # JavaScript Standard Style | ||
| * **使用两个空格** 进行缩进。 | ||
| * **使用两个空格**进行缩进。 | ||
@@ -33,3 +33,3 @@ eslint: [`indent`](http://eslint.org/docs/rules/indent) | ||
| * **不要留下未使用的变量**。 | ||
| * **不要定义未使用的变量**。 | ||
@@ -80,3 +80,3 @@ eslint: [`no-unused-vars`](http://eslint.org/docs/rules/no-unused-vars) | ||
| * **字符串拼接操作符(Infix operators)**之间要留空格。 | ||
| * **字符串拼接操作符 (Infix operators)** 之间要留空格。 | ||
@@ -136,3 +136,3 @@ eslint: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops) | ||
| * **多行 if 语句的** 的括号不能省。 | ||
| * **多行 if 语句的**的括号不能省。 | ||
@@ -177,3 +177,3 @@ eslint: [`curly`](http://eslint.org/docs/rules/curly) | ||
| * **使用浏览器全局变量时加上**`window.`前缀。<br> | ||
| * **使用浏览器全局变量时加上** `window.` 前缀。<br> | ||
| Exceptions are: `document`, `console` and `navigator`. | ||
@@ -187,3 +187,3 @@ | ||
| * **不允许有连续多行的空行**。 | ||
| * **不允许有连续多行空行**。 | ||
@@ -206,3 +206,3 @@ eslint: [`no-multiple-empty-lines`](http://eslint.org/docs/rules/no-multiple-empty-lines) | ||
| * **对于三元运算符** 操持`?`和`:`与他们所负责的代码处于同一行 | ||
| * **对于三元运算符** `?` 和 `:` 与他们所负责的代码处于同一行 | ||
@@ -306,3 +306,3 @@ eslint: [`operator-linebreak`](http://eslint.org/docs/rules/operator-linebreak) | ||
| * **点号操作符须与属性处在同一行**。 | ||
| * **点号操作符须与属性需在同一行**。 | ||
@@ -496,3 +496,3 @@ eslint: [`dot-location`](http://eslint.org/docs/rules/dot-location) | ||
| * **不要定义重复的函数参数**。 | ||
| * **不要定义冗余的函数参数**。 | ||
@@ -511,3 +511,3 @@ eslint: [`no-dupe-args`](http://eslint.org/docs/rules/no-dupe-args) | ||
| * **类中不要定义重复的属性**。 | ||
| * **类中不要定义冗余的属性**。 | ||
@@ -534,3 +534,3 @@ eslint: [`no-dupe-class-members`](http://eslint.org/docs/rules/no-dupe-class-members) | ||
| * **`switch` 语句中不要定义重复的 `case`**。 | ||
| * **`switch` 语句中不要定义重复的 `case` 分支**。 | ||
@@ -611,3 +611,3 @@ eslint: [`no-duplicate-case`](http://eslint.org/docs/rules/no-duplicate-case) | ||
| * **譬如多余的函数上下文绑定**。 | ||
| * **避免多余的函数上下文绑定**。 | ||
@@ -689,3 +689,3 @@ eslint: [`no-extra-bind`](http://eslint.org/docs/rules/no-extra-bind) | ||
| * **譬如对声明过的函数重新赋值**。 | ||
| * **避免对声明过的函数重新赋值**。 | ||
@@ -707,3 +707,3 @@ eslint: [`no-func-assign`](http://eslint.org/docs/rules/no-func-assign) | ||
| * **不要使用隐式的`eval()`**。 | ||
| * **注意隐式的 `eval()`**。 | ||
@@ -727,3 +727,3 @@ eslint: [`no-implied-eval`](http://eslint.org/docs/rules/no-implied-eval) | ||
| * **不要向 `RegExp` 的构造器传入非法的正则表达式**。 | ||
| * **不要向 `RegExp` 构造器传入非法的正则表达式**。 | ||
@@ -995,3 +995,3 @@ eslint: [`no-invalid-regexp`](http://eslint.org/docs/rules/no-invalid-regexp) | ||
| * **类中,使用 `this` 前请确保 `super()` 已调用**。 | ||
| * **使用 `this` 前请确保 `super()` 已调用**。 | ||
@@ -1009,3 +1009,3 @@ eslint: [`no-this-before-super`](http://eslint.org/docs/rules/no-this-before-super) | ||
| * **用`throw`抛错时,抛出 `Error` 对象而不是字符串**。 | ||
| * **用 `throw` 抛错时,抛出 `Error` 对象而不是字符串**。 | ||
@@ -1052,3 +1052,3 @@ eslint: [`no-throw-literal`](http://eslint.org/docs/rules/no-throw-literal) | ||
| * **`return`,`throw`,`continue` 和 `break` 这些语句后面的代码都是多余的**。 | ||
| * **`return`,`throw`,`continue` 和 `break` 后不要再跟代码**。 | ||
@@ -1064,3 +1064,3 @@ eslint: [`no-unreachable`](http://eslint.org/docs/rules/no-unreachable) | ||
| * **`finally` 代码块中不要再程序流程**。 | ||
| * **`finally` 代码块中不要再改变程序执行流程**。 | ||
@@ -1095,3 +1095,3 @@ eslint: [`no-unsafe-finally`](http://eslint.org/docs/rules/no-unsafe-finally) | ||
| * **避免使用不必要的动态计算值作对象属性**。 | ||
| * **避免使用不必要的计算值作对象属性**。 | ||
@@ -1194,3 +1194,3 @@ eslint: [`no-useless-computed-key`](http://eslint.org/docs/rules/no-useless-computed-key) | ||
| * **分号前面不留空格,后面留空格**。 | ||
| * **遇到分号时空格要后留前不留**。 | ||
@@ -1204,3 +1204,3 @@ eslint: [`semi-spacing`](http://eslint.org/docs/rules/semi-spacing) | ||
| * **代码块开始之间留一个空格**。 | ||
| * **代码块首尾留空格**。 | ||
@@ -1232,3 +1232,3 @@ eslint: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks) | ||
| * **注释前后留空格**。 | ||
| * **注释首尾留空格**。 | ||
@@ -1272,3 +1272,3 @@ eslint: [`spaced-comment`](http://eslint.org/docs/rules/spaced-comment) | ||
| * **自调用匿名函数 (IIFEs) 需要使用括号包裹**。 | ||
| * **自调用匿名函数 (IIFEs) 使用括号包裹**。 | ||
@@ -1347,4 +1347,2 @@ eslint: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife) | ||
| Clever short-hands are discouraged, in favor of clear and readable expressions, whenever | ||
| possible. | ||
| 相比更加可读易懂的代码,那些看似投巧的写法是不可取的。 | ||
@@ -1371,15 +1369,13 @@ | ||
| ##### 一些相关视频: | ||
| ##### 一个值得观看的视频: | ||
| - [Are Semicolons Necessary in JavaScript? - YouTube][3] | ||
| - [JavaScript 中的分号多余吗?- YouTube][3] | ||
| All popular code minifiers in use today use AST-based minification, so they can | ||
| handle semicolon-less JavaScript with no issues (since semicolons are not required | ||
| in JavaScript). | ||
| 当前主流的代码压缩方案都是基于词法(AST-based)进行的,所以在处理无分号的代码时完全没有压力(何况 JavaScript 中分号本来就不是强制的)。 | ||
| ##### 一段摘抄自 *["An Open Letter to JavaScript Leaders Regarding Semicolons"][1]* 一书的内容: | ||
| ##### 一段摘抄自 *["An Open Letter to JavaScript Leaders Regarding Semicolons"][1]* 这篇文章的内容: | ||
| > [自动化插入分号的做法]是安全可依赖的,而且其产出的代码能够在所有浏览器里很好地运行。 Closure compiler, yuicompressor, packer 还有 jsmin 都能正确地对这样的代码进行压缩处理。并没有任何性能相关的问题。 | ||
| > | ||
| > 不得不说,Javascript 社区里的大牛们一直是错误的,并不能教给你最佳实践。真是让人忧伤啊。 我建议先弄清楚 JS 是怎样断句的(如此地方双是看起来断了其实并没有),明白了这个后就可以随心写出漂亮的代码了。 | ||
| > 不得不说,Javascript 社区里的大牛们一直是错误的,并不能教给你最佳实践。真是让人忧伤啊。 我建议先弄清楚 JS 是怎样断句的(还有就是哪些地方看起来断了其实并没有),明白了这个后就可以随心写出漂亮的代码了。 | ||
| > | ||
@@ -1396,3 +1392,3 @@ > 一般来说, `\n` 表示语句结束,除非: | ||
| > | ||
| > 第三条也容易理解。 `if (x)\ny()` is equivalent to `if (x) { y() }`. 解释器向下寻找到代码块或一条语句为止。 | ||
| > 第三条也容易理解。 `if (x)\ny()` 等价于 `if (x) { y() }`。解释器会向下寻找到代码块或一条语句为止。 | ||
| > | ||
@@ -1399,0 +1395,0 @@ > `;` 是条合法的 JavaScript 语句。所以 `if(x);` 等价于 `if(x){}`,表示 “如果 x 为真,什么也不做。” 这种写法在循环里面可以看到,就是当条件判断与条件更新是同一个方法的时候。 不常见,但也不至于没听说过吧。 |
+2
-2
| { | ||
| "name": "standard", | ||
| "description": "JavaScript Standard Style", | ||
| "version": "10.0.1", | ||
| "version": "10.0.2", | ||
| "author": { | ||
@@ -16,3 +16,3 @@ "email": "feross@feross.org", | ||
| "eslint": "~3.19.0", | ||
| "eslint-config-standard": "10.2.0", | ||
| "eslint-config-standard": "10.2.1", | ||
| "eslint-config-standard-jsx": "4.0.1", | ||
@@ -19,0 +19,0 @@ "eslint-plugin-import": "~2.2.0", |
+30
-11
@@ -22,3 +22,4 @@ <h1 align="center"> | ||
| <a href="docs/README-esla.md">Spanish</a>, | ||
| <a href="docs/README-zhtw.md">繁體中文</a> | ||
| <a href="docs/README-zhtw.md">繁體中文</a>, | ||
| <a href="docs/README-zhcn.md">简体中文</a> | ||
| </p> | ||
@@ -261,8 +262,4 @@ | ||
| Install **[Syntastic][vim-1]** and add this line to `.vimrc`: | ||
| Install **[ale][vim-1]**. | ||
| ```vim | ||
| let g:syntastic_javascript_checkers = ['standard'] | ||
| ``` | ||
| For automatic formatting on save, add these lines to `.vimrc`: | ||
@@ -275,4 +272,8 @@ | ||
| [vim-1]: https://github.com/scrooloose/syntastic | ||
| Alternative plugins to consider include [neomake][vim-2] and [syntastic][vim-3], both of which have built-in support for `standard` (though configuration may be necessary). | ||
| [vim-1]: https://github.com/w0rp/ale | ||
| [vim-2]: https://github.com/neomake/neomake | ||
| [vim-3]: https://github.com/vim-syntastic/syntastic | ||
| ### Emacs | ||
@@ -491,6 +492,6 @@ | ||
| valid JavaScript before `standard` sees it. To use a custom parser, install it from | ||
| npm (example: `npm install eslint-plugin-flowtype`) and run: | ||
| npm and run: | ||
| ```bash | ||
| $ standard --plugin flowtype | ||
| $ standard --plugin PLUGIN_NAME | ||
| ``` | ||
@@ -503,3 +504,3 @@ | ||
| "standard": { | ||
| "plugins": [ "flowtype" ] | ||
| "plugins": [ "PLUGIN_NAME" ] | ||
| } | ||
@@ -509,5 +510,23 @@ } | ||
| To use Flow, you need to use `babel-eslint` as your parser. So, run | ||
| `npm install eslint-plugin-flowtype babel-eslint`, then run: | ||
| ```bash | ||
| $ standard --plugin flowtype --parser babel-eslint | ||
| ``` | ||
| Or, add this to `package.json`: | ||
| ```json | ||
| { | ||
| "standard": { | ||
| "plugins": [ "flowtype" ], | ||
| "parser": "babel-eslint" | ||
| } | ||
| } | ||
| ``` | ||
| If `standard` is installed globally (i.e. `npm install standard --global`), then | ||
| be sure to install `eslint-plugin-flowtype` globally as well, with | ||
| `npm install eslint-plugin-flowtype -g`. | ||
| `npm install eslint-plugin-flowtype --global`. | ||
@@ -514,0 +533,0 @@ *Note: `plugin` and `plugins` are equivalent.* |
312915
9.75%20
5.26%720
2.71%+ Added
- Removed