Skip to content

import/no-restricted-paths doesn't support path aliases #317

@gyenabubakar

Description

@gyenabubakar

I have three path aliases setup in my vite.config.ts and tsconfig.json:

  • ~ => src/
  • ui => src/components/*
  • utils => src/lib/index.ts

Files in src/components/* and src/lib/* must not import stuff from ~ and ~/**. I've tried using eslint-plugin-import and eslint-import-resolver-typescript but the former expects the real path, not the aliases and that's not the behaviour I want.

Here's my config (v9):

import prettier from 'eslint-config-prettier';
import js from '@eslint/js';
import svelte from 'eslint-plugin-svelte';
import globals from 'globals';
import ts from 'typescript-eslint';
import importPlugin from 'eslint-plugin-import';

export default ts.config(
  js.configs.recommended,
  ...ts.configs.recommended,
  ...svelte.configs['flat/recommended'],
  prettier,
  ...svelte.configs['flat/prettier'],
  importPlugin.flatConfigs.recommended,
  {
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.node,
      },
    },
  },
  {
    files: ['**/*.svelte'],

    languageOptions: {
      parserOptions: {
        parser: ts.parser,
      },
    },
  },
  {
    ignores: ['build/', '.svelte-kit/', 'dist/', 'storybook-static/'],
  },
  {
    rules: {
      '@typescript-eslint/consistent-type-imports': 'error',
      // ignore unused vars starting with _
      '@typescript-eslint/no-unused-vars': [
        'warn', // or "error"
        {
          argsIgnorePattern: '^_',
          varsIgnorePattern: '^_',
          caughtErrorsIgnorePattern: '^_',
        },
      ],
    },
  },
  {
    settings: {
      'import/resolver': {
        typescript: {
          project: '.', // this loads <rootDir>/tsconfig.json to eslint
        },
      },
    },
  },
  {
    rules: {
      'import/no-restricted-paths': [
        'error',
        {
          zones: [
            {
              target: ['./src/lib', './src/components'],
              from: ['./src/lib', './src/components'],
              except: ['utils', 'ui'],
              message: "Import via the alias 'utils' or 'ui' instead.",
            },
          ],
        },
      ],
    },
  },
);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions