Permalink
Browse files

initial commit

  • Loading branch information...
0 parents commit 1ac303e9a633ee38d168a014dcea10eaf5a95aab @jonrohan jonrohan committed Jun 14, 2016
Showing with 576 additions and 0 deletions.
  1. +1 −0 .gitignore
  2. +3 −0 .npmignore
  3. +12 −0 .travis.yml
  4. +3 −0 CHANGELOG.md
  5. +21 −0 LICENSE
  6. +79 −0 README.md
  7. +103 −0 __tests__/index.js
  8. +319 −0 index.js
  9. +35 −0 package.json
@@ -0,0 +1 @@
+node_modules
@@ -0,0 +1,3 @@
+__tests__
+*.yml
+.github
@@ -0,0 +1,12 @@
+language: node_js
+node_js:
+ - '5'
+
+deploy:
+ provider: npm
+ email: ${NPM_EMAIL}
+ api_key: ${NPM_API_KEY}
+ skip_cleanup: true
+ on:
+ branch: master
+ repo: ${TRAVIS_REPO_SLUG}
@@ -0,0 +1,3 @@
+# 1.0.0
+
+- Creating a sharable config object
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 GitHub Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
@@ -0,0 +1,79 @@
+# Primer Stylelint Config
+
+[![NPM version](http://img.shields.io/npm/v/stylelint-config-primer.svg)](https://www.npmjs.org/package/stylelint-config-primer)
+[![Build Status](https://travis-ci.org/primer/stylelint-config-primer.svg?branch=master)](https://travis-ci.org/primer/stylelint-config-primer)
+
+> A sharable stylelint config object that enforces GitHub's css rules
+
+## Install
+
+```
+$ npm install --save stylelint-config-primer
+```
+
+## Usage
+
+Within your [stylelint config object](http://stylelint.io/user-guide/configuration/#extends) You can extend this configuration. This will serve as a base for your config, then you can make overrides in your own config object.
+
+```json
+{
+ "extends": "stylelint-config-primer"
+}
+```
+
+## Documentation
+
+### Plugins
+
+* [stylelint-scss](https://github.com/kristerkari/stylelint-scss): A collection of SCSS specific linting rules for stylelint
+ * [scss/selector-no-redundant-nesting-selector](https://github.com/kristerkari/stylelint-scss/blob/master/src/rules/selector-no-redundant-nesting-selector/README.md): Disallow redundant nesting selectors (`&`).
+* [stylelint-selector-no-utility](https://github.com/primer/stylelint-selector-no-utility): Stylelint rule that doesn't allow the styling of utility classes in CSS
+
+### Configured lints
+
+This is a list of the lints turned on in this configuration, and what they do.
+
+#### At-rule
+
+* [at-rule-blacklist](http://stylelint.io/user-guide/rules/at-rule-blacklist/): `["extend"]` should never be used in `@rule`.
+* [at-rule-name-case](http://stylelint.io/user-guide/rules/at-rule-name-case/): at rules must be in written lowercase.
+* [at-rule-name-space-after](http://stylelint.io/user-guide/rules/at-rule-name-space-after/): There must always be a single space after at-rule names in single-line declaration blocks.
+* [at-rule-semicolon-newline-after](http://stylelint.io/user-guide/rules/at-rule-semicolon-newline-after/): There must always be a newline after the semicolon.
+
+#### Block
+
+* [block-closing-brace-newline-after](http://stylelint.io/user-guide/rules/block-closing-brace-newline-after/): There must always be a newline after the closing brace.
+* [block-closing-brace-newline-before](http://stylelint.io/user-guide/rules/block-closing-brace-newline-before/): There must always be a newline before the closing brace in multi-line blocks.
+* [block-closing-brace-space-before](http://stylelint.io/user-guide/rules/block-closing-brace-space-before/): There must always be a single space before the closing brace in single-line blocks.
+* [block-no-empty](http://stylelint.io/user-guide/rules/block-no-empty/): Disallow empty blocks.
+* [block-opening-brace-newline-after](http://stylelint.io/user-guide/rules/block-opening-brace-newline-after/): There must always be a newline after the opening brace in multi-line blocks.
+* [block-opening-brace-space-after](http://stylelint.io/user-guide/rules/block-opening-brace-space-after/): There must always be a single space after the opening brace in single-line blocks.
+* [block-opening-brace-space-before](http://stylelint.io/user-guide/rules/block-opening-brace-space-before/): There must always be a single space before the opening brace.
+
+#### Color
+
+* [color-hex-case](http://stylelint.io/user-guide/rules/color-hex-case/): Hex colors must be written in lowercase.
+* [color-hex-length](http://stylelint.io/user-guide/rules/color-hex-length/): Always use short hex notation, where available.
+* [color-named](http://stylelint.io/user-guide/rules/color-named/): Colors must never be named.
+* [color-no-invalid-hex](http://stylelint.io/user-guide/rules/color-no-invalid-hex/): Hex values must be valid.
+
+#### Comment
+
+* [comment-empty-line-before](http://stylelint.io/user-guide/rules/comment-empty-line-before/): There must always be an empty line before comments. _Except_: Comments that are nested and the first child of their parent node. _Ignore_: stylelint commands
+* [comment-whitespace-inside](http://stylelint.io/user-guide/rules/comment-whitespace-inside/): There must always be whitespace inside the markers.
+
+#### Declaration
+
+* [declaration-bang-space-after](http://stylelint.io/user-guide/rules/declaration-bang-space-after/): There must never be whitespace after the bang.
+* [declaration-bang-space-before](http://stylelint.io/user-guide/rules/declaration-bang-space-before/): There must always be a single space before the bang.
+
+#### Declaration block
+
+* [declaration-block-no-duplicate-properties](http://stylelint.io/user-guide/rules/declaration-block-no-duplicate-properties/): Disallow duplicate properties within declaration blocks. _Ignore_: consecutive duplicated properties.
+* [declaration-block-no-shorthand-property-overrides](http://stylelint.io/user-guide/rules/declaration-block-no-shorthand-property-overrides/): Disallow shorthand properties that override related longhand properties.
+* [declaration-block-properties-order](http://stylelint.io/user-guide/rules/declaration-block-properties-order/): Properties in declaration blocks must be [sorted according to this list]().
+
+
+## License
+
+[MIT](./LICENSE) © [GitHub](https://github.com/)
@@ -0,0 +1,103 @@
+import config from "../"
+import stylelint from "stylelint"
+import test from "ava"
+
+const validCss = (
+`@import "x.css";
+@import "y.css";
+
+/**
+ * Multi-line comment
+ */
+.selector-1,
+.selector-2,
+.selector-3[type="text"] {
+ display: block;
+ box-sizing: border-box;
+ color: #333;
+ background: linear-gradient(#fff, rgba(0, 0, 0, 0.8));
+}
+.selector-a,
+.selector-b:not(:first-child) {
+ top: calc(calc(1em * 2) / 3);
+ padding: 10px !important;
+}
+.selector-x { width: 10%; }
+.selector-y { width: 20%; }
+.selector-z { width: 30%; }
+
+/* Single-line comment */
+@media (min-width >= 60em) {
+ .selector {
+ /* Flush to parent comment */
+ transform: translate(1, 1) scale(3);
+ }
+}
+@media (min-orientation: portrait), projection and (color) {
+ .selector-i + .selector-ii {
+ font-family: helvetica, "arial black", sans-serif;
+ background: color(rgb(0, 0, 0) lightness(50%));
+ }
+}
+
+/* Flush single line comment */
+@media
+ screen and (min-resolution: 192dpi),
+ screen and (min-resolution: 2dppx) {
+ .selector {
+ height: 10rem;
+ margin: 10px;
+ margin-bottom: 5px;
+ background-image:
+ repeating-linear-gradient(
+ -45deg,
+ transparent,
+ #fff 25px,
+ rgba(255, 255, 255, 1) 50px
+ );
+ box-shadow:
+ 0 1px 1px #000,
+ 0 1px 0 #fff,
+ 2px 2px 1px 1px #ccc inset;
+ }
+
+ /* Flush nested single line comment */
+ .selector::after {
+ content: "→";
+ background-image: url("x.svg");
+ }
+}
+`)
+
+const invalidCss = (
+`a {
+ top: .2em;
+}
+`)
+
+test("no warnings with valid css", t => {
+ return stylelint.lint({
+ code: validCss,
+ config: config,
+ })
+ .then(data => {
+ const { errored, results } = data
+ const { warnings } = results[0]
+ t.falsy(errored, "no errored")
+ t.is(warnings.length, 0, "flags no warnings")
+ })
+})
+
+test("a warning with invalid css", t => {
+ return stylelint.lint({
+ code: invalidCss,
+ config: config,
+ })
+ .then(data => {
+ const { errored, results } = data
+ const { warnings } = results[0]
+ t.truthy(errored, "errored")
+ t.is(warnings.length, 1, "flags one warning")
+ t.is(warnings[0].text, "Expected a leading zero (number-leading-zero)", "correct warning text")
+ })
+})
Oops, something went wrong.

0 comments on commit 1ac303e

Please sign in to comment.