diff --git a/packages/cli/src/commands/repo/lint.ts b/packages/cli/src/commands/repo/lint.ts index 08d111712d..1cd0f1ce63 100644 --- a/packages/cli/src/commands/repo/lint.ts +++ b/packages/cli/src/commands/repo/lint.ts @@ -17,10 +17,18 @@ import chalk from 'chalk'; import { Command } from 'commander'; import { relative as relativePath } from 'path'; -import { PackageGraph } from '../../lib/monorepo'; +import { PackageGraph, ExtendedPackageJSON } from '../../lib/monorepo'; import { runWorkerQueueThreads } from '../../lib/parallel'; import { paths } from '../../lib/paths'; +function depCount(pkg: ExtendedPackageJSON) { + const deps = pkg.dependencies ? Object.keys(pkg.dependencies).length : 0; + const devDeps = pkg.devDependencies + ? Object.keys(pkg.devDependencies).length + : 0; + return deps + devDeps; +} + export async function command(cmd: Command): Promise { let packages = await PackageGraph.listTargetPackages(); @@ -29,6 +37,10 @@ export async function command(cmd: Command): Promise { packages = await graph.listChangedPackages({ ref: cmd.since }); } + // Packages are ordered from most to least number of dependencies, as a + // very cheap way of guessing which packages are more likely to be larger. + packages.sort((a, b) => depCount(b.packageJson) - depCount(a.packageJson)); + // This formatter uses the cwd to format file paths, so let's have that happen from the root instead if (cmd.format === 'eslint-formatter-friendly') { process.chdir(paths.targetRoot); diff --git a/packages/cli/src/lib/monorepo/index.ts b/packages/cli/src/lib/monorepo/index.ts index aa12c63abc..7156975c07 100644 --- a/packages/cli/src/lib/monorepo/index.ts +++ b/packages/cli/src/lib/monorepo/index.ts @@ -15,4 +15,8 @@ */ export { PackageGraph } from './PackageGraph'; -export type { PackageGraphNode } from './PackageGraph'; +export type { + PackageGraphNode, + ExtendedPackage, + ExtendedPackageJSON, +} from './PackageGraph';