GitXplorerGitXplorer
v

style-guide

public
1236 stars
33 forks
18 issues

Commits

List of commits on branch canary.
Unverified
1377fa3bedafe60954d20f80a455e3a0597bb354

release: 6.0.0

vvercel-release-bot committed 7 months ago
Unverified
4571defdbc29355ba215d5a84bdc4543e5b48f9e

release: 6.0.0-canary.1

vvercel-release-bot committed 7 months ago
Verified
dd7004d580d706b7e54e65dbd7497e06416dc508

feat(deps): update `@typescript-eslint/*` dependencies (#102)

mmrmckeb committed 7 months ago
Verified
40f1c5dedcb3ecad84de000aa3bdc76bc7b25780

revert: feat(eslint): update `@typescript-eslint/*` dependencies (#99) (#101)

mmrmckeb committed 7 months ago
Unverified
ba372ab5207d99bd5c4cd74500eee9a2cdd50fac

release: 5.3.0-canary.8

vvercel-release-bot committed 7 months ago
Verified
8820565d968807176caefd04c918417d991c9caa

build: update Node version for `semantic-release` (#100)

mmrmckeb committed 7 months ago

README

The README file for this repository.

The Vercel Style Guide

Introduction

This repository is the home of Vercel's style guide, which includes configs for popular linting and styling tools.

The following configs are available, and are designed to be used together.

Contributing

Please read our contributing guide before creating a pull request.

Installation

All of our configs are contained in one package, @vercel/style-guide. To install:

# If you use npm
npm i --save-dev @vercel/style-guide

# If you use pnpm
pnpm i --save-dev @vercel/style-guide

# If you use Yarn
yarn add --dev @vercel/style-guide

Some of our ESLint configs require peer dependencies. We'll note those alongside the available configs in the ESLint section.

Prettier

Note: Prettier is a peer-dependency of this package, and should be installed at the root of your project.

See: https://prettier.io/docs/en/install.html

To use the shared Prettier config, set the following in package.json.

{
  "prettier": "@vercel/style-guide/prettier"
}

ESLint

Note: ESLint is a peer-dependency of this package, and should be installed at the root of your project.

See: https://eslint.org/docs/user-guide/getting-started#installation-and-usage

This ESLint config is designed to be composable.

The following base configs are available. You can use one or both of these configs, but they should always be first in extends:

  • @vercel/style-guide/eslint/browser
  • @vercel/style-guide/eslint/node

Note that you can scope configs, so that configs only target specific files. For more information, see: Scoped configuration with overrides.

The following additional configs are available:

  • @vercel/style-guide/eslint/jest
  • @vercel/style-guide/eslint/jest-react (includes rules for @testing-library/react)
  • @vercel/style-guide/eslint/next (requires @next/eslint-plugin-next to be installed at the same version as next)
  • @vercel/style-guide/eslint/playwright-test
  • @vercel/style-guide/eslint/react
  • @vercel/style-guide/eslint/typescript (requires typescript to be installed and additional configuration)
  • @vercel/style-guide/eslint/vitest

You'll need to use require.resolve to provide ESLint with absolute paths, due to an issue around ESLint config resolution (see eslint/eslint#9188).

For example, use the shared ESLint config(s) in a Next.js project, set the following in .eslintrc.js.

module.exports = {
  extends: [
    require.resolve('@vercel/style-guide/eslint/browser'),
    require.resolve('@vercel/style-guide/eslint/react'),
    require.resolve('@vercel/style-guide/eslint/next'),
  ],
};

Configuring ESLint for TypeScript

Some of the rules enabled in the TypeScript config require additional type information, you'll need to provide the path to your tsconfig.json.

For more information, see: https://typescript-eslint.io/docs/linting/type-linting

const { resolve } = require('node:path');

const project = resolve(__dirname, 'tsconfig.json');

module.exports = {
  root: true,
  extends: [
    require.resolve('@vercel/style-guide/eslint/node'),
    require.resolve('@vercel/style-guide/eslint/typescript'),
  ],
  parserOptions: {
    project,
  },
  settings: {
    'import/resolver': {
      typescript: {
        project,
      },
    },
  },
};

Configuring custom components for jsx-a11y

It's common practice for React apps to have shared components like Button, which wrap native elements. You can pass this information along to jsx-a11y via the components setting.

The below list is not exhaustive.

module.exports = {
  root: true,
  extends: [require.resolve('@vercel/style-guide/eslint/react')],
  settings: {
    'jsx-a11y': {
      components: {
        Article: 'article',
        Button: 'button',
        Image: 'img',
        Input: 'input',
        Link: 'a',
        Video: 'video',
      },
    },
  },
};

Scoped configuration with overrides

ESLint configs can be scoped to include/exclude specific paths. This ensures that rules don't "leak" into places where those rules don't apply.

In this example, Jest rules are only being applied to files matching Jest's default test match pattern.

module.exports = {
  extends: [require.resolve('@vercel/style-guide/eslint/node')],
  overrides: [
    {
      files: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'],
      extends: [require.resolve('@vercel/style-guide/eslint/jest')],
    },
  ],
};

A note on file extensions

By default, all TypeScript rules are scoped to files ending with .ts and .tsx.

However, when using overrides, file extensions must be included or ESLint will only include .js files.

module.exports = {
  overrides: [
    { files: [`directory/**/*.[jt]s?(x)`], rules: { 'my-rule': 'off' } },
  ],
};

TypeScript

This style guide provides multiple TypeScript configs. These configs correlate to the LTS Node.js versions, providing the appropriate lib, module, target, and moduleResolution settings for each version. The following configs are available:

Node.js Version TypeScript Config
v16 @vercel/style-guide/typescript/node16
v18 @vercel/style-guide/typescript/node18
v20 @vercel/style-guide/typescript/node20

To use the shared TypeScript config, set the following in tsconfig.json.

{
  "extends": "@vercel/style-guide/typescript/node16"
}

The base TypeScript config is also available as @vercel/style-guide/typescript which only specifies a set of general rules. You should inherit from this file when setting custom lib, module, target, and moduleResolution settings.