add unused var, import lint rule

This commit is contained in:
Aman Varshney
2025-05-18 23:41:01 +05:30
parent 0532057c3b
commit bd4cf40bb8
27 changed files with 54 additions and 60 deletions

View File

@@ -8,7 +8,7 @@ import { setupTauri } from "./tauri-setup";
import type { ProjectConfig } from "../types"; import type { ProjectConfig } from "../types";
export async function setupAddons(config: ProjectConfig) { export async function setupAddons(config: ProjectConfig) {
const { projectName, addons, frontend, projectDir } = config; const { addons, frontend, projectDir } = config;
const hasReactWebFrontend = const hasReactWebFrontend =
frontend.includes("react-router") || frontend.includes("tanstack-router"); frontend.includes("react-router") || frontend.includes("tanstack-router");
const hasNuxtFrontend = frontend.includes("nuxt"); const hasNuxtFrontend = frontend.includes("nuxt");

View File

@@ -156,7 +156,7 @@ export async function setupApi(config: ProjectConfig): Promise<void> {
devDependencies: reactQueryDevDeps, devDependencies: reactQueryDevDeps,
projectDir: webDir, projectDir: webDir,
}); });
} catch (error) {} } catch (_error) {}
} else { } else {
} }
} }
@@ -169,7 +169,7 @@ export async function setupApi(config: ProjectConfig): Promise<void> {
dependencies: reactQueryDeps, dependencies: reactQueryDeps,
projectDir: nativeDir, projectDir: nativeDir,
}); });
} catch (error) {} } catch (_error) {}
} else { } else {
} }
} }
@@ -190,7 +190,7 @@ export async function setupApi(config: ProjectConfig): Promise<void> {
devDependencies: solidQueryDevDeps, devDependencies: solidQueryDevDeps,
projectDir: webDir, projectDir: webDir,
}); });
} catch (error) {} } catch (_error) {}
} }
} }
} }
@@ -212,7 +212,7 @@ export async function setupApi(config: ProjectConfig): Promise<void> {
dependencies: webDepsToAdd, dependencies: webDepsToAdd,
projectDir: webDir, projectDir: webDir,
}); });
} catch (error) {} } catch (_error) {}
} else { } else {
} }
} }
@@ -225,7 +225,7 @@ export async function setupApi(config: ProjectConfig): Promise<void> {
dependencies: ["convex"], dependencies: ["convex"],
projectDir: nativeDir, projectDir: nativeDir,
}); });
} catch (error) {} } catch (_error) {}
} else { } else {
} }
} }
@@ -248,7 +248,7 @@ export async function setupApi(config: ProjectConfig): Promise<void> {
await fs.writeJson(pkgJsonPath, pkgJson, { spaces: 2 }); await fs.writeJson(pkgJsonPath, pkgJson, { spaces: 2 });
} else { } else {
} }
} catch (error) {} } catch (_error) {}
}; };
if (webDirExists) { if (webDirExists) {

View File

@@ -6,7 +6,7 @@ import type { ProjectConfig } from "../types";
import { addPackageDependency } from "../utils/add-package-deps"; import { addPackageDependency } from "../utils/add-package-deps";
export async function setupAuth(config: ProjectConfig): Promise<void> { export async function setupAuth(config: ProjectConfig): Promise<void> {
const { projectName, auth, frontend, backend, projectDir } = config; const { auth, frontend, backend, projectDir } = config;
if (backend === "convex" || !auth) { if (backend === "convex" || !auth) {
return; return;
} }

View File

@@ -7,7 +7,7 @@ import type { ProjectConfig } from "../types";
export async function setupBackendDependencies( export async function setupBackendDependencies(
config: ProjectConfig, config: ProjectConfig,
): Promise<void> { ): Promise<void> {
const { projectName, backend, runtime, api, projectDir } = config; const { backend, runtime, api, projectDir } = config;
if (backend === "convex") { if (backend === "convex") {
return; return;

View File

@@ -405,7 +405,7 @@ function generateScriptsList(
packageManagerRunCmd: string, packageManagerRunCmd: string,
database: ProjectDatabase, database: ProjectDatabase,
orm: ProjectOrm, orm: ProjectOrm,
auth: boolean, _auth: boolean,
hasNative: boolean, hasNative: boolean,
addons: ProjectAddons[], addons: ProjectAddons[],
backend: string, backend: string,

View File

@@ -56,17 +56,8 @@ async function addEnvVariablesToFile(
export async function setupEnvironmentVariables( export async function setupEnvironmentVariables(
config: ProjectConfig, config: ProjectConfig,
): Promise<void> { ): Promise<void> {
const { const { backend, frontend, database, auth, examples, dbSetup, projectDir } =
projectName, config;
backend,
frontend,
database,
orm,
auth,
examples,
dbSetup,
projectDir,
} = config;
const hasReactRouter = frontend.includes("react-router"); const hasReactRouter = frontend.includes("react-router");
const hasTanStackRouter = frontend.includes("tanstack-router"); const hasTanStackRouter = frontend.includes("tanstack-router");

View File

@@ -5,7 +5,7 @@ import type { ProjectConfig } from "../types";
import { addPackageDependency } from "../utils/add-package-deps"; import { addPackageDependency } from "../utils/add-package-deps";
export async function setupExamples(config: ProjectConfig): Promise<void> { export async function setupExamples(config: ProjectConfig): Promise<void> {
const { projectName, examples, frontend, backend, projectDir } = config; const { examples, frontend, backend, projectDir } = config;
if ( if (
backend === "convex" || backend === "convex" ||

View File

@@ -51,7 +51,7 @@ async function runBiomeCheck(
})`${packageManager} biome check --write .`; })`${packageManager} biome check --write .`;
s.stop("Biome check completed successfully"); s.stop("Biome check completed successfully");
} catch (error) { } catch (_error) {
s.stop(pc.yellow("Biome check encountered issues")); s.stop(pc.yellow("Biome check encountered issues"));
log.warn(pc.yellow("Some files may need manual formatting")); log.warn(pc.yellow("Some files may need manual formatting"));
} }

View File

@@ -23,7 +23,7 @@ async function checkAtlasCLI(): Promise<boolean> {
: pc.yellow("MongoDB Atlas CLI not found"), : pc.yellow("MongoDB Atlas CLI not found"),
); );
return exists; return exists;
} catch (error) { } catch (_error) {
s.stop(pc.red("Error checking for MongoDB Atlas CLI")); s.stop(pc.red("Error checking for MongoDB Atlas CLI"));
return false; return false;
} }
@@ -106,7 +106,7 @@ async function writeEnvFile(projectDir: string, config?: MongoDBConfig) {
} }
await fs.writeFile(envPath, envContent.trim()); await fs.writeFile(envPath, envContent.trim());
} catch (error) { } catch (_error) {
consola.error("Failed to update environment configuration"); consola.error("Failed to update environment configuration");
} }
} }
@@ -130,7 +130,7 @@ ${pc.green("MongoDB Atlas Manual Setup Instructions:")}
} }
export async function setupMongoDBAtlas(config: ProjectConfig) { export async function setupMongoDBAtlas(config: ProjectConfig) {
const { projectName, projectDir } = config; const { projectDir } = config;
const mainSpinner = spinner(); const mainSpinner = spinner();
mainSpinner.start("Setting up MongoDB Atlas"); mainSpinner.start("Setting up MongoDB Atlas");

View File

@@ -73,7 +73,7 @@ async function authenticateWithNeon(packageManager: ProjectPackageManager) {
); );
log.success("Authenticated with Neon successfully!"); log.success("Authenticated with Neon successfully!");
return true; return true;
} catch (error) { } catch (_error) {
consola.error(pc.red("Failed to authenticate with Neon")); consola.error(pc.red("Failed to authenticate with Neon"));
} }
} }
@@ -113,7 +113,7 @@ async function createNeonProject(
pc.red("Failed to extract connection information from response"), pc.red("Failed to extract connection information from response"),
); );
return null; return null;
} catch (error) { } catch (_error) {
consola.error(pc.red("Failed to create Neon project")); consola.error(pc.red("Failed to create Neon project"));
} }
} }
@@ -144,7 +144,7 @@ DATABASE_URL="your_connection_string"`);
import type { ProjectConfig } from "../types"; import type { ProjectConfig } from "../types";
export async function setupNeonPostgres(config: ProjectConfig): Promise<void> { export async function setupNeonPostgres(config: ProjectConfig): Promise<void> {
const { projectName, packageManager, projectDir } = config; const { packageManager, projectDir } = config;
const setupSpinner = spinner(); const setupSpinner = spinner();
setupSpinner.start("Setting up Neon PostgreSQL"); setupSpinner.start("Setting up Neon PostgreSQL");

View File

@@ -10,7 +10,6 @@ export function displayPostInstallInstructions(
) { ) {
const { const {
database, database,
projectName,
relativePath, relativePath,
packageManager, packageManager,
depsInstalled, depsInstalled,

View File

@@ -93,7 +93,7 @@ async function writeEnvFile(projectDir: string, config?: PrismaConfig) {
} }
await fs.writeFile(envPath, envContent.trim()); await fs.writeFile(envPath, envContent.trim());
} catch (error) { } catch (_error) {
consola.error("Failed to update environment configuration"); consola.error("Failed to update environment configuration");
} }
} }
@@ -143,7 +143,7 @@ export default prisma;
} }
} }
return true; return true;
} catch (error) { } catch (_error) {
log.warn( log.warn(
pc.yellow("Could not add Prisma Accelerate extension automatically"), pc.yellow("Could not add Prisma Accelerate extension automatically"),
); );

View File

@@ -176,7 +176,7 @@ async function updateRootPackageJson(
cwd: projectDir, cwd: projectDir,
}); });
packageJson.packageManager = `${options.packageManager}@${stdout.trim()}`; packageJson.packageManager = `${options.packageManager}@${stdout.trim()}`;
} catch (e) { } catch (_e) {
log.warn(`Could not determine ${options.packageManager} version.`); log.warn(`Could not determine ${options.packageManager} version.`);
} }

View File

@@ -4,7 +4,7 @@ import type { ProjectBackend, ProjectConfig } from "../types";
import { addPackageDependency } from "../utils/add-package-deps"; import { addPackageDependency } from "../utils/add-package-deps";
export async function setupRuntime(config: ProjectConfig): Promise<void> { export async function setupRuntime(config: ProjectConfig): Promise<void> {
const { projectName, runtime, backend, projectDir } = config; const { runtime, backend, projectDir } = config;
if (backend === "convex" || backend === "next" || runtime === "none") { if (backend === "convex" || backend === "next" || runtime === "none") {
return; return;
@@ -25,7 +25,7 @@ export async function setupRuntime(config: ProjectConfig): Promise<void> {
async function setupBunRuntime( async function setupBunRuntime(
serverDir: string, serverDir: string,
backend: ProjectBackend, _backend: ProjectBackend,
): Promise<void> { ): Promise<void> {
const packageJsonPath = path.join(serverDir, "package.json"); const packageJsonPath = path.join(serverDir, "package.json");
if (!(await fs.pathExists(packageJsonPath))) return; if (!(await fs.pathExists(packageJsonPath))) return;

View File

@@ -7,7 +7,7 @@ import type { ProjectConfig } from "../types";
import { getPackageExecutionCommand } from "../utils/get-package-execution-command"; import { getPackageExecutionCommand } from "../utils/get-package-execution-command";
export async function setupStarlight(config: ProjectConfig): Promise<void> { export async function setupStarlight(config: ProjectConfig): Promise<void> {
const { projectName, packageManager, projectDir } = config; const { packageManager, projectDir } = config;
const s = spinner(); const s = spinner();
try { try {

View File

@@ -10,7 +10,7 @@ import { getPackageExecutionCommand } from "../utils/get-package-execution-comma
import type { ProjectConfig } from "../types"; import type { ProjectConfig } from "../types";
export async function setupTauri(config: ProjectConfig): Promise<void> { export async function setupTauri(config: ProjectConfig): Promise<void> {
const { projectName, packageManager, frontend, projectDir } = config; const { packageManager, frontend, projectDir } = config;
const s = spinner(); const s = spinner();
const clientPackageDir = path.join(projectDir, "apps/web"); const clientPackageDir = path.join(projectDir, "apps/web");
@@ -40,11 +40,11 @@ export async function setupTauri(config: ProjectConfig): Promise<void> {
await fs.writeJson(clientPackageJsonPath, packageJson, { spaces: 2 }); await fs.writeJson(clientPackageJsonPath, packageJson, { spaces: 2 });
} }
const hasTanstackRouter = frontend.includes("tanstack-router"); const _hasTanstackRouter = frontend.includes("tanstack-router");
const hasReactRouter = frontend.includes("react-router"); const hasReactRouter = frontend.includes("react-router");
const hasNuxt = frontend.includes("nuxt"); const hasNuxt = frontend.includes("nuxt");
const hasSvelte = frontend.includes("svelte"); const hasSvelte = frontend.includes("svelte");
const hasSolid = frontend.includes("solid"); const _hasSolid = frontend.includes("solid");
const hasNext = frontend.includes("next"); const hasNext = frontend.includes("next");
const devUrl = const devUrl =

View File

@@ -47,7 +47,7 @@ async function processAndCopyFiles(
} else { } else {
await fs.copy(srcPath, destPath, { overwrite: true }); await fs.copy(srcPath, destPath, { overwrite: true });
} }
} catch (error) {} } catch (_error) {}
} }
} }
@@ -72,7 +72,7 @@ export async function setupFrontendTemplates(
const hasSolidWeb = context.frontend.includes("solid"); const hasSolidWeb = context.frontend.includes("solid");
const hasNativeWind = context.frontend.includes("native-nativewind"); const hasNativeWind = context.frontend.includes("native-nativewind");
const hasUnistyles = context.frontend.includes("native-unistyles"); const hasUnistyles = context.frontend.includes("native-unistyles");
const hasNative = hasNativeWind || hasUnistyles; const _hasNative = hasNativeWind || hasUnistyles;
const isConvex = context.backend === "convex"; const isConvex = context.backend === "convex";
if (hasReactWeb || hasNuxtWeb || hasSvelteWeb || hasSolidWeb) { if (hasReactWeb || hasNuxtWeb || hasSvelteWeb || hasSolidWeb) {
@@ -677,7 +677,7 @@ export async function setupExamplesTemplate(
await fs.copy(srcPath, destPath, { overwrite: false }); await fs.copy(srcPath, destPath, { overwrite: false });
} }
} }
} catch (error) {} } catch (_error) {}
} }
} }

View File

@@ -47,7 +47,7 @@ async function loginToTurso() {
await $`turso auth login`; await $`turso auth login`;
s.stop("Logged in to Turso successfully!"); s.stop("Logged in to Turso successfully!");
return true; return true;
} catch (error) { } catch (_error) {
s.stop(pc.red("Failed to log in to Turso")); s.stop(pc.red("Failed to log in to Turso"));
} }
} }
@@ -166,7 +166,7 @@ async function createTursoDatabase(dbName: string, groupName: string | null) {
dbUrl: dbUrl.trim(), dbUrl: dbUrl.trim(),
authToken: authToken.trim(), authToken: authToken.trim(),
}; };
} catch (error) { } catch (_error) {
s.stop(pc.red("Failed to retrieve database connection details")); s.stop(pc.red("Failed to retrieve database connection details"));
} }
} }
@@ -198,15 +198,15 @@ DATABASE_AUTH_TOKEN=your_auth_token`);
import type { ProjectConfig } from "../types"; import type { ProjectConfig } from "../types";
export async function setupTurso(config: ProjectConfig): Promise<void> { export async function setupTurso(config: ProjectConfig): Promise<void> {
const { projectName, orm, projectDir } = config; const { orm, projectDir } = config;
const isDrizzle = orm === "drizzle"; const _isDrizzle = orm === "drizzle";
const setupSpinner = spinner(); const setupSpinner = spinner();
setupSpinner.start("Setting up Turso database"); setupSpinner.start("Setting up Turso database");
try { try {
const platform = os.platform(); const platform = os.platform();
const isMac = platform === "darwin"; const isMac = platform === "darwin";
const isLinux = platform === "linux"; const _isLinux = platform === "linux";
const isWindows = platform === "win32"; const isWindows = platform === "win32";
if (isWindows) { if (isWindows) {

View File

@@ -15,7 +15,6 @@ import yargs from "yargs";
import { hideBin } from "yargs/helpers"; import { hideBin } from "yargs/helpers";
import { DEFAULT_CONFIG } from "./constants"; import { DEFAULT_CONFIG } from "./constants";
import { createProject } from "./helpers/create-project"; import { createProject } from "./helpers/create-project";
import { setupDatabase } from "./helpers/db-setup";
import { gatherConfig } from "./prompts/config-prompts"; import { gatherConfig } from "./prompts/config-prompts";
import { getProjectName } from "./prompts/project-name"; import { getProjectName } from "./prompts/project-name";
import type { import type {
@@ -632,11 +631,11 @@ function processAndValidateFlags(
config.database ?? (options.yes ? DEFAULT_CONFIG.database : undefined); config.database ?? (options.yes ? DEFAULT_CONFIG.database : undefined);
const effectiveOrm = const effectiveOrm =
config.orm ?? (options.yes ? DEFAULT_CONFIG.orm : undefined); config.orm ?? (options.yes ? DEFAULT_CONFIG.orm : undefined);
const effectiveAuth = const _effectiveAuth =
config.auth ?? (options.yes ? DEFAULT_CONFIG.auth : undefined); config.auth ?? (options.yes ? DEFAULT_CONFIG.auth : undefined);
const effectiveDbSetup = const _effectiveDbSetup =
config.dbSetup ?? (options.yes ? DEFAULT_CONFIG.dbSetup : undefined); config.dbSetup ?? (options.yes ? DEFAULT_CONFIG.dbSetup : undefined);
const effectiveExamples = const _effectiveExamples =
config.examples ?? (options.yes ? DEFAULT_CONFIG.examples : undefined); config.examples ?? (options.yes ? DEFAULT_CONFIG.examples : undefined);
const effectiveFrontend = const effectiveFrontend =
config.frontend ?? (options.yes ? DEFAULT_CONFIG.frontend : undefined); config.frontend ?? (options.yes ? DEFAULT_CONFIG.frontend : undefined);

View File

@@ -1,4 +1,4 @@
import { cancel, confirm, isCancel, log } from "@clack/prompts"; import { cancel, confirm, isCancel } from "@clack/prompts";
import pc from "picocolors"; import pc from "picocolors";
import { DEFAULT_CONFIG } from "../constants"; import { DEFAULT_CONFIG } from "../constants";
import type { ProjectBackend } from "../types"; import type { ProjectBackend } from "../types";

View File

@@ -51,8 +51,7 @@ export async function gatherConfig(
): Promise<ProjectConfig> { ): Promise<ProjectConfig> {
const result = await group<PromptGroupResults>( const result = await group<PromptGroupResults>(
{ {
frontend: ({ results }) => frontend: () => getFrontendChoice(flags.frontend, flags.backend),
getFrontendChoice(flags.frontend, flags.backend),
backend: ({ results }) => backend: ({ results }) =>
getBackendFrameworkChoice(flags.backend, results.frontend), getBackendFrameworkChoice(flags.backend, results.frontend),
runtime: ({ results }) => runtime: ({ results }) =>

View File

@@ -1,4 +1,4 @@
import { cancel, isCancel, log, select } from "@clack/prompts"; import { cancel, isCancel, select } from "@clack/prompts";
import pc from "picocolors"; import pc from "picocolors";
import { DEFAULT_CONFIG } from "../constants"; import { DEFAULT_CONFIG } from "../constants";
import type { ProjectBackend, ProjectDatabase, ProjectOrm } from "../types"; import type { ProjectBackend, ProjectDatabase, ProjectOrm } from "../types";

View File

@@ -1,6 +1,6 @@
import { cancel, isCancel, select } from "@clack/prompts"; import { cancel, isCancel, select } from "@clack/prompts";
import pc from "picocolors"; import pc from "picocolors";
import type { ProjectPackageManager, ProjectRuntime } from "../types"; import type { ProjectPackageManager } from "../types";
import { getUserPkgManager } from "../utils/get-package-manager"; import { getUserPkgManager } from "../utils/get-package-manager";
export async function getPackageManagerChoice( export async function getPackageManagerChoice(

View File

@@ -4,6 +4,7 @@
"module": "ESNext", "module": "ESNext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"esModuleInterop": true, "esModuleInterop": true,
"verbatimModuleSyntax": true,
"strict": true, "strict": true,
"skipLibCheck": true, "skipLibCheck": true,
"outDir": "dist", "outDir": "dist",

View File

@@ -49,7 +49,7 @@ export default function SponsorsSection() {
href="https://github.com/sponsors/AmanVarshney01" href="https://github.com/sponsors/AmanVarshney01"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="mt-4 inline-flex items-center gap-2 rounded-lg border border-primary bg-transparent px-4 py-2 font-mono text-base text-primary shadow-md transition-all hover:bg-primary hover:text-primary-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2" className="mt-4 inline-flex items-center gap-2 rounded-lg border border-primary bg-transparent px-4 py-2 font-mono text-base text-primary shadow-md transition-all hover:bg-primary hover:text-primary-foreground focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2"
> >
<svg <svg
className="h-4 w-4" className="h-4 w-4"
@@ -116,7 +116,7 @@ export default function SponsorsSection() {
href="https://github.com/sponsors/AmanVarshney01" href="https://github.com/sponsors/AmanVarshney01"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="inline-flex items-center gap-3 rounded-xl border border-primary bg-transparent px-6 py-3 font-mono font-semibold text-lg text-primary shadow-md transition-all duration-300 ease-in-out hover:bg-primary hover:text-primary-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2" className="inline-flex items-center gap-3 rounded-xl border border-primary bg-transparent px-6 py-3 font-mono font-semibold text-lg text-primary shadow-md transition-all duration-300 ease-in-out hover:bg-primary hover:text-primary-foreground focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2"
> >
<svg className="h-5 w-5" fill="currentColor" viewBox="0 0 20 20"> <svg className="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
<title>Heart Icon</title> <title>Heart Icon</title>

View File

@@ -1935,7 +1935,7 @@ const StackBuilder = () => {
href="https://github.com/sponsors/AmanVarshney01" href="https://github.com/sponsors/AmanVarshney01"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="mt-4 inline-flex items-center gap-2 rounded-lg bg-primary px-6 py-3 font-mono text-lg text-primary-foreground shadow-lg transition-all hover:bg-primary/90 hover:shadow-xl focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2" className="mt-4 inline-flex items-center gap-2 rounded-lg bg-primary px-6 py-3 font-mono text-lg text-primary-foreground shadow-lg transition-all hover:bg-primary/90 hover:shadow-xl focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2"
> >
<svg <svg
className="h-6 w-6" className="h-6 w-6"
@@ -2008,7 +2008,7 @@ const StackBuilder = () => {
href="https://github.com/sponsors/AmanVarshney01" href="https://github.com/sponsors/AmanVarshney01"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="inline-flex items-center gap-3 rounded-xl border border-primary bg-transparent px-6 py-3 font-mono font-semibold text-lg text-primary shadow-md transition-all duration-300 ease-in-out hover:bg-primary hover:text-primary-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2" className="inline-flex items-center gap-3 rounded-xl border border-primary bg-transparent px-6 py-3 font-mono font-semibold text-lg text-primary shadow-md transition-all duration-300 ease-in-out hover:bg-primary hover:text-primary-foreground focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2"
> >
<svg <svg
className="h-5 w-5" className="h-5 w-5"

View File

@@ -38,6 +38,11 @@
"functions": ["clsx", "cva", "cn"] "functions": ["clsx", "cva", "cn"]
} }
} }
},
"correctness": {
"noUnusedImports": "error",
"noUnusedLabels": "error",
"noUnusedVariables": "error"
} }
}, },
"ignore": ["template"] "ignore": ["template"]