.../articles/
Detecting eslint-disable-line in CircleCI

Detecting eslint-disable-line in CircleCI

2019.09.26

ESLint

When developing a JavaScript project with multiple people (or even solo), using ESLint lets you keep your coding rules consistent. Running ESLint in CI as well makes it easier to catch mistakes as an early step before review.

eslint-disable-line

ESLint lets you disable rules for a specific line using an inline comment.

When developing locally, you might use eslint-disable-line here and there just to check something, but if you push code while it's still in there, code that doesn't actually conform to the coding rules can slip in unintentionally.

For example, even with a rule that forbids console, ESLint can't detect code like the following: (if anyone knows a way to catch this, please let me know) ↓ see the addendum below

console.log('hello') // eslint-disable-line

Detecting It in CircleCI

To check whether eslint-disable-line is being used, run the following command in CircleCI.

      - run:
          name: Search eslint-disable-line
          command: |
            git grep --heading --break -n -e 'eslint-disable-line' -- '*.js' '*.vue' || status=$?
            if [ -z "$status" ]; then exit 1; fi
git grep --heading --break -n -e 'eslint-disable-line' -- '*.js' '*.vue'

This is a command that searches js files (and vue files in this example — other patterns can be specified too) for eslint-disable-line; feel free to adjust the options to your liking.

Regarding the trailing || status=$?: the git-grep command above returns a status of 0 if a matching line is found, and a status of 1 if no matching line is found.

In other words, if a matching line is found, $status doesn't get a value set — so the command below exits with exit 1 if the value isn't set.

if [ -z "$status" ]; then exit 1; fi

This lets us detect eslint-disable-line in CircleCI.


Addendum

Looking at the ESLint CLI documentation, I found an option called --no-inline-config.

With this option, even places where rules are changed inline get evaluated against the original rules, so passing this option when running ESLint in CI should achieve the same goal.

It also seems possible to set up a config that forbids inline rule changes altogether, so if needed, it might be worth setting that up too.

written by

.../article/

Articles

All articles

From Firebase to Vercel, Contentful to microCMS — a migration log written with Claude Code

From Firebase to Vercel, Contentful to microCMS — a migration log written with Claude Code

We moved our corporate site's hosting and CMS, and made it bilingual along the way. The constraints we only found by running against real data were more useful than the migration itself, so this post focuses on where we got stuck.

Can't Read POST Data with Firebase Functions × Remix?

Can't Read POST Data with Firebase Functions × Remix?

How to read POST data from a Remix action when running on Firebase Functions.

Generative AI for Executives and Leaders: An Approach to Self-Driven DX

Generative AI for Executives and Leaders: An Approach to Self-Driven DX

Building a structure where executives and leaders themselves can identify issues and evaluate solutions using generative AI. We introduce how combining this with our hands-on support dramatically improves both the quality and speed of digital transformation.

Deploying a Monorepo Next.js App (App Router) to AWS Amplify

Deploying a Monorepo Next.js App (App Router) to AWS Amplify

Notes on the obstacles we hit while deploying a Next.js app managed in a monorepo to AWS Amplify.

Keeping Production Running Smoothly with Remote Work and Online Meetings [Documentation]

Keeping Production Running Smoothly with Remote Work and Online Meetings [Documentation]

Many production companies have adopted remote work as a result of the pandemic, and we are one of them.

Designing an E-Commerce Site That Sells: How to Find Great Reference Examples

Designing an E-Commerce Site That Sells: How to Find Great Reference Examples

There is no single formula for e-commerce design that sells. Driving revenue requires a solid concept, and getting to that concept requires thorough research.

Productivity Tools We Recommend as a Production Company, Including Services That Work Well Solo

Productivity Tools We Recommend as a Production Company, Including Services That Work Well Solo

With remote work becoming the norm during the COVID-19 pandemic, our team now works from home most days of the week.

We Released Thought Recorder, a Figma Plugin for Keeping a Commit History of Your Designs

We Released Thought Recorder, a Figma Plugin for Keeping a Commit History of Your Designs

We hope this helps web designers who work in Figma. Read on for how to use it.

How to Build an E-Commerce Site, and Which Platforms We Recommend

How to Build an E-Commerce Site, and Which Platforms We Recommend

Shopping online for fashion, appliances, and even groceries is now routine. With the pandemic accelerating the shift, we receive a steady stream of questions about which platform to use and how much it costs.

Generating FastAPI Schema Classes from OpenAPI

Generating FastAPI Schema Classes from OpenAPI

We chose FastAPI, a relatively modern framework, for a Python API project. FastAPI can generate an OpenAPI definition from your backend code, but here we do the opposite: generating FastAPI schema classes from an OpenAPI definition prepared in advance.

View all articles

Contact us