Skip to content
Snippets Groups Projects

Task update2024

Merged Johannes Kreiner requested to merge task_update2024 into master
Compare and Show latest version
4 files
+ 115
49
Compare changes
  • Side-by-side
  • Inline
Files
4
+ 39
36
const hirestime = require('hirestime');
const chalk = require('chalk');
const globby = require('globby');
const scss = require('postcss-scss');
const stylelint = require('stylelint');
const { ESLint } = require('eslint');
const path = require('path');
const prettier = require('prettier');
const fs = require('fs').promises;
const LintingFormatter = require('../lintingFormatter');
const Task = require('../task');
import hirestime from 'hirestime';
import chalk from 'chalk';
import * as globby from 'globby';
import scss from 'postcss-scss';
import stylelint from 'stylelint';
import { ESLint } from 'eslint';
import path from 'node:path';
import process from 'node:process';
import prettier from 'prettier';
import { promises as fs } from 'node:fs';
import LintingFormatter from '../lintingFormatter.js';
import Task from '../task.js';
/**
* The Lint task reports all warnings and errors of your js and scss files.
*/
module.exports = class Lint extends Task {
export default class Lint extends Task {
/**
* Start the linting process
*
* @override
*/
async run(_subTask = null) {
this.getElapsed = hirestime.default();
this.getElapsed = hirestime();
const steps = [];
if (_subTask) {
if (_subTask === 'js') {
@@ -31,8 +32,7 @@ module.exports = class Lint extends Task {
steps.push(this._runCssLint());
}
} else {
steps.push(this._runJsLint());
steps.push(this._runCssLint());
steps.push(this._runJsLint(), this._runCssLint());
}
await Promise.all(steps);
this._logger.info(`Task ${chalk.bold('lint')} finished after ${this.getElapsed.s()}s`);
@@ -42,13 +42,12 @@ module.exports = class Lint extends Task {
* Kicks off the linting task
*/
async _runJsLint() {
const files = await globby(
[
`${this._path}/${this._config.directories.javascriptSrc}/**/*.js`,
`${this._path}/${this._config.directories.javascriptSrc}/**/*.ts`,
'!**/*.min.js',
].concat(this._config.js.excludeFromQa),
);
const files = await globby.globby([
`${this._path}/${this._config.directories.javascriptSrc}/**/*.js`,
`${this._path}/${this._config.directories.javascriptSrc}/**/*.ts`,
'!**/*.min.js',
...this._config.js.excludeFromQa,
]);
try {
if (this._config.fix) {
@@ -56,7 +55,7 @@ module.exports = class Lint extends Task {
}
await this._jsLint(files);
} catch (error) {
this._handleError(error.message);
this._handleError(error.stack);
}
}
@@ -68,8 +67,9 @@ module.exports = class Lint extends Task {
async _jsLint(_files) {
const eslint = new ESLint({
fix: this._config.fix,
resolvePluginsRelativeTo: path.join(process.cwd(), 'sgc-core'),
cache: true,
cwd: process.cwd(),
overrideConfigFile: path.join(process.cwd(), 'eslint.config.mjs'),
});
const results = await eslint.lintFiles(_files);
@@ -92,11 +92,10 @@ module.exports = class Lint extends Task {
* Kicks off the CSS Linting Task
*/
async _runCssLint() {
const files = await globby(
[`${this._path}/${this._config.directories.sass}/**/*.scss`].concat(
this._config.css.excludeFromQa,
),
);
const files = await globby.globby([
`${this._path}/${this._config.directories.sass}/**/*.scss`,
...this._config.css.excludeFromQa,
]);
if (this._config.fix) {
await this.runPrettier(files);
@@ -157,13 +156,14 @@ module.exports = class Lint extends Task {
* Kicks of the prettier task
*/
async runPrettier(files) {
let configFile = await prettier.resolveConfigFile('./');
let configFile = await prettier.resolveConfigFile(process.cwd());
if (!configFile) {
// Fallback configuration from sgc-core
configFile = await prettier.resolveConfigFile('./sgc-core/');
configFile = await prettier.resolveConfigFile(path.join(process.cwd(), 'sgc-core'));
}
const config = await prettier.resolveConfig(configFile);
const config = await prettier.resolveConfig(configFile);
const calls = [];
files.forEach((file) => {
calls.push(this.prettify(file, { ...config, filepath: file }));
@@ -180,15 +180,18 @@ module.exports = class Lint extends Task {
* @returns {Promise<void>}
*/
async prettify(file, config) {
const content = (await fs.readFile(file)).toString();
const content = await fs.readFile(file, 'utf8');
// Check if file is already formatted
if (prettier.check(content, config)) {
if (await prettier.check(content, config)) {
return;
}
this._logger.info(`Running prettier on file ${file}`);
const formatted = prettier.format(content, config);
const formatted = await prettier.format(content, {
...config,
...(file.includes('.scss') ? { trailingComma: 'none' } : {}),
});
await fs.writeFile(file, formatted);
}
};
}
Loading