CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-eslint-config-google

ESLint shareable config for the Google JavaScript style guide

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

ESLint Config Google

ESLint Config Google provides a shareable ESLint configuration that enforces Google's JavaScript style guide for ES2015+ code. This package serves as a comprehensive linting ruleset that can be easily integrated into JavaScript projects to maintain consistent code style and quality according to Google's coding standards.

Package Information

  • Package Name: eslint-config-google
  • Package Type: npm
  • Language: JavaScript
  • Installation: npm install --save-dev eslint eslint-config-google

Core Imports

This package exports a single ESLint configuration object. It is typically used via ESLint's extends mechanism rather than direct import:

// .eslintrc.js or similar ESLint configuration file
module.exports = {
  "extends": "google",
  "rules": {
    // Additional project-specific rules...
  }
};

For direct access to the configuration object:

const googleConfig = require('eslint-config-google');
// Access the rules object
const rules = googleConfig.rules;

Architecture

ESLint Config Google is a simple configuration package that:

  • Exports a single rules object: Contains ESLint rule configurations following Google's JavaScript style guide
  • Peer dependency pattern: Requires ESLint as a peer dependency to avoid version conflicts
  • Shareable config format: Follows ESLint's shareable config specification for easy integration
  • Comprehensive coverage: Configures rules across all major ESLint categories (Possible Errors, Best Practices, Variables, Stylistic Issues, ECMAScript 6)

Basic Usage

Standard Configuration

// .eslintrc.js
module.exports = {
  "extends": "google",
  "rules": {
    // Additional, per-project rules...
  }
};

Combined with ESLint Recommended

// .eslintrc.js  
module.exports = {
  "extends": ["eslint:recommended", "google"],
  "rules": {
    // Additional, per-project rules...
  }
};

JSON Configuration

{
  "extends": "google",
  "rules": {
    // Additional, per-project rules...
  }
}

Capabilities

ESLint Configuration Object

The main export is a standard ESLint configuration object containing comprehensive rule definitions.

/**
 * Main ESLint configuration object implementing Google JavaScript style guide
 * @type {ESLintConfig}
 */
module.exports = {
  rules: ESLintRules
};

interface ESLintConfig {
  rules: ESLintRules;
}

interface ESLintRules {
  [ruleName: string]: ESLintRuleConfig;
}

type ESLintRuleConfig = 
  | 0 | 1 | 2 
  | "off" | "warn" | "error"
  | [0 | 1 | 2 | "off" | "warn" | "error", ...any[]];

Complete Rules Configuration

The package exports a comprehensive ESLint configuration object with rules organized by category. Below is the complete set of rules as configured in the source:

/**
 * Complete ESLint rules configuration from eslint-config-google
 * All rules listed exactly as configured in the source code
 */
rules: {
  // Possible Errors
  "no-cond-assign": 0,
  "no-irregular-whitespace": 2,
  "no-unexpected-multiline": 2,
  "valid-jsdoc": [2, {
    requireParamDescription: false,
    requireReturnDescription: false,
    requireReturn: false,
    prefer: {returns: "return"}
  }],

  // Best Practices  
  "curly": [2, "multi-line"],
  "guard-for-in": 2,
  "no-caller": 2,
  "no-extend-native": 2,
  "no-extra-bind": 2,
  "no-invalid-this": 2,
  "no-multi-spaces": 2,
  "no-multi-str": 2,
  "no-new-wrappers": 2,
  "no-throw-literal": 2,
  "no-with": 2,
  "prefer-promise-reject-errors": 2,

  // Variables
  "no-unused-vars": [2, {args: "none"}],

  // Stylistic Issues
  "array-bracket-newline": 0,
  "array-bracket-spacing": [2, "never"],
  "array-element-newline": 0,
  "block-spacing": [2, "never"],
  "brace-style": 2,
  "camelcase": [2, {properties: "never"}],
  "comma-dangle": [2, "always-multiline"],
  "comma-spacing": 2,
  "comma-style": 2,
  "computed-property-spacing": 2,
  "eol-last": 2,
  "func-call-spacing": 2,
  "indent": [2, 2, {
    "CallExpression": {
      "arguments": 2
    },
    "FunctionDeclaration": {
      "body": 1,
      "parameters": 2
    },
    "FunctionExpression": {
      "body": 1,
      "parameters": 2
    },
    "MemberExpression": 2,
    "ObjectExpression": 1,
    "SwitchCase": 1,
    "ignoredNodes": [
      "ConditionalExpression"
    ]
  }],
  "key-spacing": 2,
  "keyword-spacing": 2,
  "linebreak-style": 2,
  "max-len": [2, {
    code: 80,
    tabWidth: 2,
    ignoreUrls: true,
    ignorePattern: "goog\\.(module|require)"
  }],
  "new-cap": 2,
  "no-array-constructor": 2,
  "no-mixed-spaces-and-tabs": 2,
  "no-multiple-empty-lines": [2, {max: 2}],
  "no-new-object": 2,
  "no-tabs": 2,
  "no-trailing-spaces": 2,
  "object-curly-spacing": 2,
  "one-var": [2, {
    var: "never",
    let: "never",
    const: "never"
  }],
  "operator-linebreak": [2, "after"],
  "padded-blocks": [2, "never"],
  "quote-props": [2, "consistent"],
  "quotes": [2, "single", {allowTemplateLiterals: true}],
  "require-jsdoc": [2, {
    require: {
      FunctionDeclaration: true,
      MethodDefinition: true,
      ClassDeclaration: true
    }
  }],
  "semi": 2,
  "semi-spacing": 2,
  "space-before-blocks": 2,
  "space-before-function-paren": [2, {
    asyncArrow: "always",
    anonymous: "never",
    named: "never"
  }],
  "spaced-comment": [2, "always"],
  "switch-colon-spacing": 2,

  // ECMAScript 6
  "arrow-parens": [2, "always"],
  "constructor-super": 2,
  "generator-star-spacing": [2, "after"],
  "no-new-symbol": 2,
  "no-this-before-super": 2,
  "no-var": 2,
  "prefer-const": [2, {destructuring: "all"}],
  "prefer-rest-params": 2,
  "prefer-spread": 2,
  "rest-spread-spacing": 2,
  "yield-star-spacing": [2, "after"]
}

Rule Access

Individual rules can be accessed programmatically:

/**
 * Access individual rule configurations
 * @param {string} ruleName - Name of the ESLint rule
 * @returns {ESLintRuleConfig} Rule configuration
 */
const googleConfig = require('eslint-config-google');
const ruleConfig = googleConfig.rules[ruleName];

// Examples:
const indentRule = googleConfig.rules['indent'];        // [2, 2, {...}]
const quotesRule = googleConfig.rules['quotes'];        // [2, 'single', {...}]
const semiRule = googleConfig.rules['semi'];            // 2

Types

/**
 * ESLint rule severity levels
 */
type ESLintSeverity = 0 | 1 | 2 | "off" | "warn" | "error";

/**
 * ESLint rule configuration
 */
type ESLintRuleConfig = 
  | ESLintSeverity
  | [ESLintSeverity, ...any[]];

/**
 * Complete ESLint rules object
 */
interface ESLintRules {
  [ruleName: string]: ESLintRuleConfig;
}

/**
 * ESLint configuration object structure
 */
interface ESLintConfig {
  rules: ESLintRules;
}

/**
 * Rule-specific option interfaces
 */
interface ValidJSDocOptions {
  requireParamDescription: boolean;
  requireReturnDescription: boolean;
  requireReturn: boolean;
  prefer: { returns: string };
}

interface IndentOptions {
  CallExpression: { arguments: number };
  FunctionDeclaration: { body: number; parameters: number };
  FunctionExpression: { body: number; parameters: number };
  MemberExpression: number;
  ObjectExpression: number;
  SwitchCase: number;
  ignoredNodes: string[];
}

interface MaxLenOptions {
  code: number;
  tabWidth: number;
  ignoreUrls: boolean;
  ignorePattern: string;
}

interface CamelCaseOptions {
  properties: "never";
}

interface OneVarOptions {
  var: "never";
  let: "never";
  const: "never";
}

interface QuotesOptions {
  allowTemplateLiterals: boolean;
}

interface RequireJSDocOptions {
  require: {
    FunctionDeclaration: boolean;
    MethodDefinition: boolean;
    ClassDeclaration: boolean;
  };
}

interface SpaceBeforeFunctionParenOptions {
  asyncArrow: "always";
  anonymous: "never";
  named: "never";
}

interface PreferConstOptions {
  destructuring: "all";
}

interface NoUnusedVarsOptions {
  args: "none";
}

Error Handling

This package does not throw errors during normal usage. ESLint itself will validate the configuration and report any issues with rule definitions or conflicting settings.

Common configuration issues:

  • Invalid rule names: ESLint will warn about unrecognized rule names
  • Invalid rule options: ESLint will report configuration errors for malformed rule options
  • Peer dependency issues: Ensure ESLint version >=5.16.0 is installed

Install with Tessl CLI

npx tessl i tessl/npm-eslint-config-google
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/eslint-config-google@0.14.x
Publish Source
CLI
Badge
tessl/npm-eslint-config-google badge