Skip to content

Commit

Permalink
feat: build config
Browse files Browse the repository at this point in the history
  • Loading branch information
runspired committed Apr 30, 2024
1 parent e0c03b0 commit 3caf328
Show file tree
Hide file tree
Showing 559 changed files with 8,235 additions and 9,079 deletions.
19 changes: 1 addition & 18 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,7 @@ dist
dist-*
tmp
unstable-preview-types
# packages/-ember-data/addon
packages/active-record/addon
packages/adapter/addon
packages/core-types/addon
packages/data-worker/addon
# packages/debug/addon
packages/graph/addon
packages/json-api/addon
packages/legacy-compat/addon
packages/model/addon
packages/request-utils/addon
packages/request/addon
packages/rest/addon
packages/schema-record/addon/
packages/serializer/addon
packages/store/addon
packages/tracking/addon
packages/ember/addon
packages/*/addon

# dependencies
bower_components
Expand Down
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

# generated files
pnpm-lock.yaml
dist
unstable-preview-types
preview-types

# we disagree with prettier and we are even more opinionated than they are
*.hbs
Expand Down
5 changes: 4 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
"eslint.format.enable": true,
"eslint.workingDirectories": [{ "mode": "auto" }, "packages/*", "tests/*"],
"eslint.options": { "reportUnusedDisableDirectives": "error" },
"eslint.useFlatConfig": true,
"eslint.experimental.useFlatConfig": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
Expand Down Expand Up @@ -39,5 +41,6 @@
"editor.insertSpaces": false,
"editor.tabSize": 4
},
"typescript.preferences.importModuleSpecifier": "project-relative"
"typescript.preferences.importModuleSpecifier": "project-relative",
"eslint.debug": true
}
50 changes: 0 additions & 50 deletions config/eslint/base.cjs

This file was deleted.

103 changes: 103 additions & 0 deletions config/eslint/browser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
// @ts-check
import js from '@eslint/js';
import prettier from 'eslint-config-prettier';
import globals from 'globals';
// @ts-expect-error
import babelParser from '@babel/eslint-parser';
import * as imports from './imports.js';
import * as isolation from './isolation.js';

// function resolve(name) {
// const fullPath = import.meta.resolve(name);
// if (fullPath.startsWith('file://')) {
// return fullPath.slice(7);
// }
// }

export function languageOptions(opts = {}) {
const options = {
parser: babelParser,
/** @type {2022} */
ecmaVersion: 2022,
/** @type {'module'} */
sourceType: 'module',
parserOptions: {
requireConfigFile: false,
babelOptions: {
babelrc: false,
configFile: false,
plugins: [
'classProperties',
'classPrivateProperties',
'classStaticBlock',
opts.enableTypescript ? ['typescript', {}] : false,
opts.enableDecorators ? ['decorators', {}] : false,
].filter(Boolean),
// \eslint-disable-next-line n/no-unpublished-require
// plugins: [[resolve('@babel/plugin-proposal-decorators'), { legacy: true }]],
},
},
globals: Object.assign({}, globals.nodeBuiltin),
};

return options;
}

export function rules(config = {}) {
const ourRules = {
eqeqeq: 'error',
'new-cap': ['error', { capIsNew: false }],
'no-caller': 'error',
'no-cond-assign': ['error', 'except-parens'],
'no-console': 'error', // no longer recommended in eslint v6, this restores it
'no-eq-null': 'error',
'no-eval': 'error',
'no-unused-vars': ['error', { args: 'none' }],

// Too many false positives
// See https://github.com/eslint/eslint/issues/11899 and similar
'require-atomic-updates': 'off',

'prefer-rest-params': 'off',
'prefer-const': 'error',
};

return Object.assign(
{},
js.configs.recommended.rules,
prettier.rules,
imports.rules(),
isolation.rules(config),
ourRules
);
}

function constructFileGlobs(srcDirs, files) {
const globs = [];

for (const dir of srcDirs) {
const hasSlash = dir.endsWith('/');
for (const file of files) {
const needsSlash = !hasSlash && !file.startsWith('/');
globs.push(`${dir}${needsSlash ? '/' : ''}${file}`);
}
}

return globs;
}

/** @returns {import('eslint').Linter.FlatConfig} */
export function browser(config = {}) {
config.enableDecorators = typeof config.enableDecorators === 'boolean' ? config.enableDecorators : true;
const baseFiles = Array.isArray(config.files) ? config.files : ['**/*.{js,gjs}'];
const files = Array.isArray(config.srcDirs) ? constructFileGlobs(config.srcDirs, baseFiles) : baseFiles;

const finalized = {
files,
languageOptions: languageOptions(config),
rules: rules(config),
plugins: imports.plugins(),
};

return finalized;
}
53 changes: 0 additions & 53 deletions config/eslint/diagnostic.cjs

This file was deleted.

23 changes: 23 additions & 0 deletions config/eslint/diagnostic.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import * as isolation from './isolation.js';
import * as qunit from './qunit.js';

const QUNIT_BANNED_IMPORTS = ['ember-qunit', 'qunit', 'ember-exam'];

/** @returns {import('eslint').Linter.FlatConfig} */
export function browser(config = {}) {
const base = qunit.ember(config);
base.rules = Object.assign(
base.rules,
{
'qunit/no-assert-equal': 'off',
},
isolation.rules({
allowedImports: ['@ember/test-helpers', '@ember/test-waiters', ...(config.allowedImports ?? [])].filter(
(v) => !QUNIT_BANNED_IMPORTS.includes(v)
),
}),
config.rules ?? {}
);

return base;
}
37 changes: 0 additions & 37 deletions config/eslint/ignore.cjs

This file was deleted.

38 changes: 38 additions & 0 deletions config/eslint/ignore.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
const RULES = [
// # unconventional js
'blueprints/*',
'!./tests/blueprints/*',
'vendor/*',

// # Declaration files
'**/*.d.ts',

// # compiled output
'dist/*',
'dist-*/*',
'addon/*',
'tmp/*',
'tmp*/*',
'DEBUG/*',
'DEBUG*/*',
'.git/*',
'.broccoli-cache/*',
'unstable-preview-types/*',

// # Special Cases
'docs/*',
'coverage/*',
'node_modules/*',
'.node_modules.ember-try/*',
'package.json.ember-try',
];

export function ignoreRules() {
return RULES.slice();
}

export function globalIgnores(additionalIgnores) {
return {
ignores: ignoreRules().concat(additionalIgnores ?? []),
};
}
17 changes: 9 additions & 8 deletions config/eslint/imports.cjs → config/eslint/imports.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import SimpleImportSortPlugin from 'eslint-plugin-simple-import-sort';
import ImportPlugin from 'eslint-plugin-import';

// See https://github.com/lydell/eslint-plugin-simple-import-sort#custom-grouping
const ImportSortGroups = [
// Side effect imports.
Expand Down Expand Up @@ -25,7 +28,7 @@ const ImportSortGroups = [
[`^\.`],
];

function rules() {
export function rules() {
return {
// Imports
'import/first': 'error',
Expand All @@ -35,11 +38,9 @@ function rules() {
};
}

function plugins() {
return ['simple-import-sort', 'import'];
export function plugins() {
return {
'simple-import-sort': SimpleImportSortPlugin,
import: ImportPlugin,
};
}

module.exports = {
plugins,
rules,
};
Loading

0 comments on commit 3caf328

Please sign in to comment.