├── .gitignore ├── README.md ├── build.js ├── class-dump ├── index.js ├── injectedConstants.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | .headers 2 | node_modules 3 | globals.json 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # eslint-config-sketch 2 | 3 | eslint config with the global variables that [Sketch.app](https://www.sketchapp.com/)'s JavaScript environment contains (Sketch + macOS headers). 4 | 5 | ### Installation 6 | 7 | ``` 8 | npm install --save-dev eslint-config-sketch 9 | ``` 10 | 11 | ### Configuration 12 | 13 | Add in your `.eslintrc`: 14 | 15 | ```diff 16 | { 17 | + "extends": ["sketch"] 18 | } 19 | ``` 20 | 21 | ### License 22 | 23 | MIT 24 | -------------------------------------------------------------------------------- /build.js: -------------------------------------------------------------------------------- 1 | const {exec} = require('child-process-promise') 2 | const fs = require('fs') 3 | 4 | const now = Date.now() 5 | 6 | const SKETCH_PATH = '/Applications/Sketch.app/Contents/MacOS/Sketch' 7 | const MACOS_SDK = '/System/Library/Frameworks' 8 | 9 | exec('rm -rf .headers').catch(() => {}) 10 | .then(() => { 11 | console.log('[1/4] Generating Sketch headers') 12 | return exec(`./class-dump -H "${SKETCH_PATH}" -o ./.headers -C "^[a-zA-Z]*$"`) 13 | }) 14 | .then(() => { 15 | console.log('[2/4] Generating macOS headers') 16 | return exec(`./class-dump -H "${MACOS_SDK}/AppKit.framework" -o ./.headers -C "^[a-zA-Z]*$" && ./class-dump -H "${MACOS_SDK}/Foundation.framework" -o ./.headers -C "^[a-zA-Z]*$"`) 17 | }) 18 | .then(() => { 19 | console.log('[3/4] Reading generating files') 20 | return new Promise((resolve, reject) => fs.readdir('./.headers', (err, res) => { 21 | if (err) { return reject(err) } 22 | resolve(res) 23 | })) 24 | }) 25 | .then((files) => { 26 | console.log('[4/4] Writing globals') 27 | const res = files.reduce((prev, f) => { 28 | prev[f.split('-')[0].replace('.h', '')] = false 29 | return prev 30 | }, require('./injectedConstants.json')) 31 | 32 | return new Promise((resolve, reject) => fs.writeFile('./globals.json', JSON.stringify(res), (err, res) => { 33 | if (err) { return reject(err) } 34 | resolve(res) 35 | })) 36 | }) 37 | .then(() => { 38 | console.log('Done in ' + (Date.now() - now) + 'ms!') 39 | }) 40 | -------------------------------------------------------------------------------- /class-dump: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skpm/eslint-config-sketch/c4b307c662b907d636168940de7eaabd2312c504/class-dump -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | globals: require('./globals.json'), 3 | 4 | rules: { 5 | eqeqeq: [0] 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /injectedConstants.json: -------------------------------------------------------------------------------- 1 | { 2 | "NSApp": false, 3 | "NSUTF8StringEncoding": false, 4 | "NSMakeRect": false, 5 | "NSLineBorder": false, 6 | "NSMakeSize": false, 7 | "log": false, 8 | "NSMakeRange": false, 9 | "NSDataBase64EncodingEndLineWithCarriageReturn": false, 10 | "CGSizeMake": false, 11 | "NSStringDrawingUsesLineFragmentOrigin": false, 12 | "NSFontWeightUltraLight": false, 13 | "NSFontWeightThin": false, 14 | "NSFontWeightLight": false, 15 | "NSFontWeightRegular": false, 16 | "NSFontWeightMedium": false, 17 | "NSFontWeightSemibold": false, 18 | "NSFontWeightBold": false, 19 | "NSFontWeightHeavy": false, 20 | "NSFontWeightBlack": false, 21 | "NSFontTraitsAttribute": false, 22 | "NSFontSymbolicTrait": false, 23 | "NSFontItalicTrait": false, 24 | "NSFontCondensedTrait": false, 25 | "NSFontWeightTrait": false 26 | } 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-config-sketch", 3 | "version": "0.2.4", 4 | "description": "An eslint config for sketch plugin development", 5 | "main": "index.js", 6 | "files": [ 7 | "globals.json", 8 | "index.js" 9 | ], 10 | "scripts": { 11 | "build": "node ./build.js", 12 | "prepublish": "npm run build" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/skpm/eslint-config-sketch.git" 17 | }, 18 | "peerDependencies": { 19 | "eslint": ">= 3" 20 | }, 21 | "keywords": [ 22 | "eslint", 23 | "config", 24 | "sketch" 25 | ], 26 | "author": "Mathieu Dutour (http://mathieu.dutour.me/)", 27 | "license": "MIT", 28 | "bugs": { 29 | "url": "https://github.com/skpm/eslint-config-sketch/issues" 30 | }, 31 | "homepage": "https://github.com/skpm/eslint-config-sketch#readme", 32 | "devDependencies": { 33 | "child-process-promise": "2.2.0" 34 | } 35 | } 36 | --------------------------------------------------------------------------------