Updated linter to work with restructure
This commit is contained in:
@ -25,7 +25,8 @@ try {
|
|||||||
console.time(`Linter (${snippet})`);
|
console.time(`Linter (${snippet})`);
|
||||||
// Synchronously read data from the snippet, get the code, write it to a temporary file
|
// Synchronously read data from the snippet, get the code, write it to a temporary file
|
||||||
let snippetData = fs.readFileSync(path.join(snippetsPath,snippet),'utf8');
|
let snippetData = fs.readFileSync(path.join(snippetsPath,snippet),'utf8');
|
||||||
let originalCode = snippetData.slice(snippetData.indexOf('```js')+5,snippetData.lastIndexOf('```'));
|
let codeStart = snippetData.indexOf('```js'), codeEnd = snippetData.search(/```[\n\r\s]+```js/g);
|
||||||
|
let originalCode = snippetData.slice(codeStart+5,codeEnd);
|
||||||
while(jobCounter >= 20){
|
while(jobCounter >= 20){
|
||||||
setTimeout(()=>{},1000);
|
setTimeout(()=>{},1000);
|
||||||
}
|
}
|
||||||
@ -36,7 +37,7 @@ try {
|
|||||||
cp.exec(`semistandard "${tempSnippet}.temp.js" --fix`,{},(error, stdOut, stdErr) => {
|
cp.exec(`semistandard "${tempSnippet}.temp.js" --fix`,{},(error, stdOut, stdErr) => {
|
||||||
jobCounter += 1;
|
jobCounter += 1;
|
||||||
let lintedCode = fs.readFileSync(`${tempSnippet}.temp.js`,'utf8');
|
let lintedCode = fs.readFileSync(`${tempSnippet}.temp.js`,'utf8');
|
||||||
fs.writeFile(path.join(snippetsPath,snippet), `${snippetData.slice(0, snippetData.indexOf('```js')+5)+lintedCode+'```\n'}`);
|
fs.writeFile(path.join(snippetsPath,snippet), `${snippetData.slice(0, codeStart+5)+lintedCode+snippetData.slice(codeEnd)}`);
|
||||||
fs.unlink(`${tempSnippet}.temp.js`);
|
fs.unlink(`${tempSnippet}.temp.js`);
|
||||||
// Log a success message
|
// Log a success message
|
||||||
console.log(`${chalk.green('SUCCESS!')} Linted snippet: ${snippet}`);
|
console.log(`${chalk.green('SUCCESS!')} Linted snippet: ${snippet}`);
|
||||||
|
|||||||
@ -6,7 +6,7 @@ Use `fs.writeFile()`, template literals and `JSON.stringify()` to write a `json`
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const JSONToFile = (obj, filename) => fs.writeFile(`${filename}.json`, JSON.stringify(obj, null, 2))
|
const JSONToFile = (obj, filename) => fs.writeFile(`${filename}.json`, JSON.stringify(obj, null, 2));
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -8,7 +8,7 @@ Use `Array.reduce()` and the `gcd` formula (uses recursion) to calculate the gre
|
|||||||
const arrayGcd = arr => {
|
const arrayGcd = arr => {
|
||||||
const gcd = (x, y) => !y ? x : gcd(y, x % y);
|
const gcd = (x, y) => !y ? x : gcd(y, x % y);
|
||||||
return arr.reduce((a, b) => gcd(a, b));
|
return arr.reduce((a, b) => gcd(a, b));
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -9,7 +9,7 @@ const arrayLcm = arr => {
|
|||||||
const gcd = (x, y) => !y ? x : gcd(y, x % y);
|
const gcd = (x, y) => !y ? x : gcd(y, x % y);
|
||||||
const lcm = (x, y) => (x * y) / gcd(x, y);
|
const lcm = (x, y) => (x * y) / gcd(x, y);
|
||||||
return arr.reduce((a, b) => lcm(a, b));
|
return arr.reduce((a, b) => lcm(a, b));
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -5,7 +5,7 @@ Converts the given array elements into `<li>` tags and appends them to the list
|
|||||||
Use `Array.map()` and `document.querySelector()` to create a list of html tags.
|
Use `Array.map()` and `document.querySelector()` to create a list of html tags.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const arrayToHtmlList = (arr, listID) => arr.map(item => document.querySelector("#"+listID).innerHTML+=`<li>${item}</li>`);
|
const arrayToHtmlList = (arr, listID) => arr.map(item => document.querySelector('#' + listID).innerHTML += `<li>${item}</li>`);
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -5,7 +5,7 @@ Returns the first non-null/undefined argument.
|
|||||||
Use `Array.find()` to return the first non `null`/`undefined` argument.
|
Use `Array.find()` to return the first non `null`/`undefined` argument.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const coalesce = (...args) => args.find(_ => ![undefined, null].includes(_))
|
const coalesce = (...args) => args.find(_ => ![undefined, null].includes(_));
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -5,7 +5,7 @@ Detects wether the website is being opened in a mobile device or a desktop/lapto
|
|||||||
Use a regular expression to test the `navigator.userAgent` property to figure out if the device is a mobile device or a desktop/laptop.
|
Use a regular expression to test the `navigator.userAgent` property to figure out if the device is a mobile device or a desktop/laptop.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const detectDeviceType = () => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ? "Mobile" : "Desktop";
|
const detectDeviceType = () => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ? 'Mobile' : 'Desktop';
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -5,7 +5,7 @@ Filters out all values from an array for which the comparator function does not
|
|||||||
Use `Array.filter()` and `Array.find()` to find the appropriate values.
|
Use `Array.filter()` and `Array.find()` to find the appropriate values.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const differenceWith = (arr, val, comp) => arr.filter(a => !val.find(b => comp(a, b)))
|
const differenceWith = (arr, val, comp) => arr.filter(a => !val.find(b => comp(a, b)));
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -6,7 +6,7 @@ Use `Array.map()`, `split()` and `Array.join()` to join the mapped array for con
|
|||||||
`String.slice()` is used to remove `#` from string start since it's added once.
|
`String.slice()` is used to remove `#` from string start since it's added once.
|
||||||
```js
|
```js
|
||||||
const extendHex = shortHex =>
|
const extendHex = shortHex =>
|
||||||
'#' + shortHex.slice(shortHex.startsWith('#') ? 1 : 0).split('').map(x => x+x).join('')
|
'#' + shortHex.slice(shortHex.startsWith('#') ? 1 : 0).split('').map(x => x + x).join('');
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -10,7 +10,7 @@ Uses a mathematical formula to calculate the length of the array required.
|
|||||||
const fibonacciUntilNum = num => {
|
const fibonacciUntilNum = num => {
|
||||||
let n = Math.ceil(Math.log(num * Math.sqrt(5) + 1 / 2) / Math.log((Math.sqrt(5) + 1) / 2));
|
let n = Math.ceil(Math.log(num * Math.sqrt(5) + 1 / 2) / Math.log((Math.sqrt(5) + 1) / 2));
|
||||||
return Array.from({ length: n}).reduce((acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i), []);
|
return Array.from({ length: n}).reduce((acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i), []);
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -9,7 +9,7 @@ If the second parameter, `end`, is not specified, the range is considered to be
|
|||||||
const inRange = (n, start, end = null) => {
|
const inRange = (n, start, end = null) => {
|
||||||
if (end && start > end) end = [start, start = end][0];
|
if (end && start > end) end = [start, start = end][0];
|
||||||
return (end == null) ? (n >= 0 && n < start) : (n >= start && n < end);
|
return (end == null) ? (n >= 0 && n < start) : (n >= start && n < end);
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -6,7 +6,7 @@ Convert the given number into an array of digits. Use `Math.pow()` to get the ap
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const isArmstrongNumber = digits =>
|
const isArmstrongNumber = digits =>
|
||||||
( arr => arr.reduce( ( a, d ) => a + Math.pow( parseInt( d ), arr.length ), 0 ) == digits ? true : false )( ( digits+'' ).split( '' ) );
|
(arr => arr.reduce((a, d) => a + Math.pow(parseInt(d), arr.length), 0) == digits)((digits + '').split(''));
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -9,7 +9,7 @@ Then, `split('')` into individual characters, `reverse()`, `join('')` and compar
|
|||||||
const palindrome = str => {
|
const palindrome = str => {
|
||||||
const s = str.toLowerCase().replace(/[\W_]/g, '');
|
const s = str.toLowerCase().replace(/[\W_]/g, '');
|
||||||
return s === s.split('').reverse().join('');
|
return s === s.split('').reverse().join('');
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -11,7 +11,7 @@ const primes = num => {
|
|||||||
numsTillSqroot = Array.from({length: sqroot - 1}).map((x, i) => i + 2);
|
numsTillSqroot = Array.from({length: sqroot - 1}).map((x, i) => i + 2);
|
||||||
numsTillSqroot.forEach(x => arr = arr.filter(y => ((y % x) !== 0) || (y == x)));
|
numsTillSqroot.forEach(x => arr = arr.filter(y => ((y % x) !== 0) || (y == x)));
|
||||||
return arr;
|
return arr;
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -10,11 +10,11 @@ Use `Array.push()` to keep track of pulled values
|
|||||||
const pullAtIndex = (arr, pullArr) => {
|
const pullAtIndex = (arr, pullArr) => {
|
||||||
let removed = [];
|
let removed = [];
|
||||||
let pulled = arr.map((v, i) => pullArr.includes(i) ? removed.push(v) : v)
|
let pulled = arr.map((v, i) => pullArr.includes(i) ? removed.push(v) : v)
|
||||||
.filter((v, i) => !pullArr.includes(i))
|
.filter((v, i) => !pullArr.includes(i));
|
||||||
arr.length = 0;
|
arr.length = 0;
|
||||||
pulled.forEach(v => arr.push(v));
|
pulled.forEach(v => arr.push(v));
|
||||||
return removed;
|
return removed;
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -14,7 +14,7 @@ const pullAtValue = (arr, pullArr) => {
|
|||||||
arr.length = 0;
|
arr.length = 0;
|
||||||
mutateTo.forEach(v => arr.push(v));
|
mutateTo.forEach(v => arr.push(v));
|
||||||
return removed;
|
return removed;
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -5,9 +5,9 @@ Repeats a string n times using `String.repeat()`
|
|||||||
If no string is provided the default is `""` and the default number of times is 2.
|
If no string is provided the default is `""` and the default number of times is 2.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const repeatString = (str="",num=2) => {
|
const repeatString = (str = '', num = 2) => {
|
||||||
return num >= 0 ? str.repeat(num) : str;
|
return num >= 0 ? str.repeat(num) : str;
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -8,7 +8,7 @@ Create a `Set` from each array, then use `Array.filter()` on each of them to onl
|
|||||||
const symmetricDifference = (a, b) => {
|
const symmetricDifference = (a, b) => {
|
||||||
const sA = new Set(a), sB = new Set(b);
|
const sA = new Set(a), sB = new Set(b);
|
||||||
return [...a.filter(x => !sB.has(x)), ...b.filter(x => !sA.has(x))];
|
return [...a.filter(x => !sB.has(x)), ...b.filter(x => !sA.has(x))];
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -10,8 +10,8 @@ const toCamelCase = str => {
|
|||||||
let s = str && str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
|
let s = str && str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
|
||||||
.map(x => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase())
|
.map(x => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase())
|
||||||
.join('');
|
.join('');
|
||||||
return s.slice(0,1).toLowerCase() + s.slice(1)
|
return s.slice(0, 1).toLowerCase() + s.slice(1);
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
Use `toLocaleString()` to convert a float-point arithmetic to the [Decimal mark](https://en.wikipedia.org/wiki/Decimal_mark) form. It makes a comma separated string from a number.
|
Use `toLocaleString()` to convert a float-point arithmetic to the [Decimal mark](https://en.wikipedia.org/wiki/Decimal_mark) form. It makes a comma separated string from a number.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const toDecimalMark = num => num.toLocaleString("en-US");
|
const toDecimalMark = num => num.toLocaleString('en-US');
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -11,8 +11,8 @@ const zip = (...arrays) => {
|
|||||||
const maxLength = Math.max(...arrays.map(x => x.length));
|
const maxLength = Math.max(...arrays.map(x => x.length));
|
||||||
return Array.from({length: maxLength}).map((_, i) => {
|
return Array.from({length: maxLength}).map((_, i) => {
|
||||||
return Array.from({length: arrays.length}, (_, k) => arrays[k][i]);
|
return Array.from({length: arrays.length}, (_, k) => arrays[k][i]);
|
||||||
})
|
});
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -5,7 +5,7 @@ Given an array of valid property identifiers and an array of values, return an o
|
|||||||
Since an object can have undefined values but not undefined property pointers, the array of properties is used to decide the structure of the resulting object using `Array.reduce()`.
|
Since an object can have undefined values but not undefined property pointers, the array of properties is used to decide the structure of the resulting object using `Array.reduce()`.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const zipObject = ( props, values ) => props.reduce( ( obj, prop, index ) => ( obj[prop] = values[index], obj ), {} )
|
const zipObject = (props, values) => props.reduce((obj, prop, index) => (obj[prop] = values[index], obj), {});
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
Reference in New Issue
Block a user