# lint

Published articles for lint.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Using static analysis in Python, JavaScript and more to make your system safer

DevFeed: [Using static analysis in Python, JavaScript and more to make your system safer](<https://devfeed.tech/articles/using-static-analysis-in-python-javascript-and-more-to-make-your-system-safer-27419.md>)

Original publisher: [Read original article](<http://engineering.khanacademy.org/posts/using-static-analysis-in-Python-and-JavaScript-to-make-your-system-safer.htm>)

Author: Khan Academy

Published: 2018-07-26T22:00:00Z

Content type: article

Language: en

Sources: [Khan Academy](<https://devfeed.tech/sources/khan-academy.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Code quality](<https://devfeed.tech/topics/code-quality.md>), [Python](<https://devfeed.tech/topics/python.md>), [Code review](<https://devfeed.tech/topics/code-review.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [React](<https://devfeed.tech/topics/react.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [code](<https://devfeed.tech/tags/code.md>), [code-quality](<https://devfeed.tech/tags/code-quality.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [eslint](<https://devfeed.tech/tags/eslint.md>), [formatting](<https://devfeed.tech/tags/formatting.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [lint](<https://devfeed.tech/tags/lint.md>), [news](<https://devfeed.tech/tags/news.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

This article describes how Khan Academy uses custom linters and static analysis across JavaScript, Python, and Kotlin to prevent known bad patterns, keep duplicated logic or shared interfaces synchronized, and enforce frontend migration practices.

### Source excerpt

By Kevin Dangoor "Linting" source code to look for errors is nothing new (the original "lint" tool turned ... Read more

## Standardizing Exception Message Style in Ruby

DevFeed: [Standardizing Exception Message Style in Ruby](<https://devfeed.tech/articles/standardizing-exception-message-style-in-ruby-20535.md>)

Original publisher: [Read original article](<https://code.dblock.org/2026/09/05/standardizing-exception-message-style-in-ruby.html>)

Author: Daniel Doubrovkine (dblock@dblock.org)

Published: 2026-09-05T00:00:00Z

Content type: article

Language: en

Sources: [Daniel Doubrovkine](<https://devfeed.tech/sources/daniel-doubrovkine.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [Exception](<https://devfeed.tech/topics/exception.md>), [ci](<https://devfeed.tech/topics/ci.md>)

Tags: [ci](<https://devfeed.tech/tags/ci.md>), [exception](<https://devfeed.tech/tags/exception.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [grape](<https://devfeed.tech/tags/grape.md>), [lint](<https://devfeed.tech/tags/lint.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [standard](<https://devfeed.tech/tags/standard.md>)

### AI overview

The article explains a convention for Ruby exception messages: they should generally begin with lowercase and omit trailing punctuation because they follow the exception class name and a colon. It describes fixing seven inconsistent sites in Grape, documenting the convention, and releasing the rubocop-exception_messages RuboCop plugin to enforce casing and punctuation, with additional checks for redundant class names and interpolation markers.

### Source excerpt

While reviewing dozens of PRs from ericproulx optimizing Grape's internals recently, I noticed that the bare raise ArgumentError, "..." calls scattered across the codebase were inconsistent: some messages were capitalized, some ended in a period, most were not. Longtime readers know where this is going. Ruby's own core and standard library exceptions don't do this - TypeError: no implicit conversion from nil to integer, ArgumentError: wrong number of arguments, and so on all read lowercase and unpunctuated, because the message is meant to be read after the exception class name and a colon, not as a standalone sentence. Grape's own Grape::Exceptions::* classes already follow this convention. The bare raise ArgumentError, "..." calls in dsl/entity.rb, dsl/inside_route.rb, dsl/validations.rb, and validations/types/dry_type_coercer.rb didn't, so I fixed those seven sites and documented the convention in CONTRIBUTING.md, in #2909. To avoid regressions, I wrote rubocop-exception_messages, a RuboCop plugin gem with two cops: ExceptionMessages/Casing flags (and autocorrects) messages that don't start with a lowercase letter. ExceptionMessages/Punctuation flags (and autocorrects) messages with a trailing period, with an exception for a literal ellipsis ("still processing.."), which is stylistic rather than a sentence ending. Both cops recognize raise Class, "message" and raise Class.new("message") forms, and handle interpolated (dstr) messages by only checking the literal string segments (the first segment for casing, the last for punctuation), since interpolated values in the middle are out of the cop's control. # bad raise ArgumentError, 'Missing required option.' # good raise ArgumentError, 'missing required option' The gem ships as a modern RuboCop plugin (via lint_roller), so it's a one-line addition to a consuming project's .rubocop.yml: plugins: - rubocop-exception_messages rubocop-exception_messages 0.2.0 is out now, and I've added it back to Grape's own Gemfile and

## How to structure a log

DevFeed: [How to structure a log](<https://devfeed.tech/articles/how-to-structure-a-log-24114.md>)

Original publisher: [Read original article](<https://blog.sentry.io/structure-a-log/>)

Author: Kyle Tryon

Published: 2026-07-21T09:00:00Z

Content type: tutorial

Language: en

Sources: [Sentry Blog](<https://devfeed.tech/sources/sentry-blog.md>)

Topics: [Logging](<https://devfeed.tech/topics/logging.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>), [TypeScript](<https://devfeed.tech/topics/typescript.md>), [ESLint](<https://devfeed.tech/topics/eslint.md>), [SIEM, Security, Observability](<https://devfeed.tech/topics/siem-security-observability.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [guide](<https://devfeed.tech/tags/guide.md>), [lint](<https://devfeed.tech/tags/lint.md>), [logs](<https://devfeed.tech/tags/logs.md>), [programming](<https://devfeed.tech/tags/programming.md>), [schema](<https://devfeed.tech/tags/schema.md>)

### AI overview

A practical guide to writing structured logs that are consistent, queryable, and useful for debugging in production. It covers event naming, flattened attributes, predictable low-cardinality values, severity levels, primitive-value constraints, and enforcing conventions with an ESLint plugin for TypeScript.

### Source excerpt

A practical guide to writing structured, queryable, lint-enforceable logs with consistent event names, attributes, severity, and schema checks.

## Lint Me: Test Sources 🖇

DevFeed: [Lint Me: Test Sources 🖇](<https://devfeed.tech/articles/lint-me-test-sources-26176.md>)

Original publisher: [Read original article](<https://zarah.dev/2025/12/02/lint-tests.html>)

Author: Zarah Dominguez

Published: 2025-12-02T00:00:00Z

Content type: tutorial

Language: en

Sources: [Zarah Dominguez](<https://devfeed.tech/sources/zarah-dominguez.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [files](<https://devfeed.tech/tags/files.md>), [flag](<https://devfeed.tech/tags/flag.md>), [lint](<https://devfeed.tech/tags/lint.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>)

### AI overview

This tutorial explains how to configure an Android Lint TODO Detector to inspect test sources without enabling every normal Lint rule for those files. It covers the relevant scope configuration and adding unit-test coverage for the change.

### Source excerpt

It has been a year, which means it is once again time to re-examine our TODO Lint rule.

## Using Git Pre-Commit Hooks

DevFeed: [Using Git Pre-Commit Hooks](<https://devfeed.tech/articles/using-git-pre-commit-hooks-10917.md>)

Original publisher: [Read original article](<https://blog.scottlowe.org/2025/10/20/using-git-pre-commit-hooks/>)

Author: Scott Lowe

Published: 2025-10-20T15:00:00Z

Content type: tutorial

Language: en

Sources: [Scott's Weblog](<https://devfeed.tech/sources/scott-s-weblog.md>)

Topics: [Git](<https://devfeed.tech/topics/git.md>), [Markdown](<https://devfeed.tech/topics/markdown.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [Script](<https://devfeed.tech/topics/script.md>)

Tags: [aws](<https://devfeed.tech/tags/aws.md>), [bash](<https://devfeed.tech/tags/bash.md>), [cilium](<https://devfeed.tech/tags/cilium.md>), [cli](<https://devfeed.tech/tags/cli.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [cni](<https://devfeed.tech/tags/cni.md>), [code](<https://devfeed.tech/tags/code.md>), [containers](<https://devfeed.tech/tags/containers.md>), [cri-o](<https://devfeed.tech/tags/cri-o.md>), [devops](<https://devfeed.tech/tags/devops.md>), [docker](<https://devfeed.tech/tags/docker.md>), [git](<https://devfeed.tech/tags/git.md>), [git-commit](<https://devfeed.tech/tags/git-commit.md>), [git-hook](<https://devfeed.tech/tags/git-hook.md>), [go](<https://devfeed.tech/tags/go.md>), [hooks](<https://devfeed.tech/tags/hooks.md>), [iac](<https://devfeed.tech/tags/iac.md>), [k8s](<https://devfeed.tech/tags/k8s.md>), [kubernetes](<https://devfeed.tech/tags/kubernetes.md>), [lint](<https://devfeed.tech/tags/lint.md>), [linux](<https://devfeed.tech/tags/linux.md>), [markdown](<https://devfeed.tech/tags/markdown.md>), [networking](<https://devfeed.tech/tags/networking.md>), [oci](<https://devfeed.tech/tags/oci.md>), [script](<https://devfeed.tech/tags/script.md>), [security](<https://devfeed.tech/tags/security.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

This tutorial explains Git pre-commit hooks and demonstrates using one to run Markdownlint on staged Markdown files before a commit. It notes that a non-zero hook exit status aborts the commit and presents a Bash implementation based on the author's site.

### Source excerpt

A while ago I wrote an article about linting Markdown files with markdownlint. In that article, I presented the use case of linting the Markdown source files for this site. While manually running linting checks is fine--there are times and situations when this is appropriate and necessary--this is the sort of task that is ideally suited for a Git pre-commit hook. In this post, I'll discuss Git pre-commit hooks in the context of using them to run linting checks. Before moving on, a disclaimer: I am not an expert on Git hooks. This post shares my limited experience and provides an example based on what I use for this site. I have no doubt that my current implementation will improve over time as my knowledge and experience grow. What is a Git Hook? As this page explains, a hook is a program "you can place in a hooks directory to trigger actions at certain points in git's execution." Generally, a hook is a script of some sort. Git supports different hooks that get invoked in response to specific actions in Git; in this particular instance, I'm focusing on the pre-commit hook. This hook gets invoked by git-commit (i.e., the user running a git commit command) and allows users to perform a series of checks or tests before actually making a commit. If the pre-commit script exits with a non-zero status, then Git aborts the commit. Using a Pre-Commit Hook to Lint Markdown For my use case, I wanted to run Markdownlint to lint the Markdown files (as described in the previous article on linting Markdown) before the commit. To do that, I came up with the following script: #!/usr/bin/env bash MDLINT="/usr/local/bin/markdownlint" for file in $(git diff --cached --name-only --diff-filter=ACM | grep "\.md"); do if ! $MDLINT "$file"; then echo "Lint check failed on file '$file'." echo "Run markdownlint to identify the errors and try again." exit 1 fi done To make this script active as a pre-commit hook, you must name it pre-commit, you must place it into Git's hook directory (which defa

## What Is Linting?

DevFeed: [What Is Linting?](<https://devfeed.tech/articles/what-is-linting-4505.md>)

Original publisher: [Read original article](<https://feeds.feedblitz.com/~/921146306/0/baeldung/cs>)

Author: John Caleb

Published: 2025-07-04T04:23:28Z

Content type: tutorial

Language: en

Sources: [Baeldung - CS](<https://devfeed.tech/sources/baeldung-cs.md>)

Topics: [developer tooling](<https://devfeed.tech/topics/developer-tooling.md>), [Code quality](<https://devfeed.tech/topics/code-quality.md>), [Parsing](<https://devfeed.tech/topics/parsing.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [automated](<https://devfeed.tech/tags/automated.md>), [code-analysis](<https://devfeed.tech/tags/code-analysis.md>), [code-quality](<https://devfeed.tech/tags/code-quality.md>), [compilers-and-linkers](<https://devfeed.tech/tags/compilers-and-linkers.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [lint](<https://devfeed.tech/tags/lint.md>), [linter](<https://devfeed.tech/tags/linter.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-compilers-and-linkers](<https://devfeed.tech/tags/programming-compilers-and-linkers.md>), [quality-control](<https://devfeed.tech/tags/quality-control.md>), [readability](<https://devfeed.tech/tags/readability.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

This tutorial explains what linting is, why linters are useful in software development, and how they detect syntax, semantic, formatting, and coding-style problems. It describes parsing source code into an abstract syntax tree and applying rules to identify issues such as undefined variables and incorrect code usage.

### Source excerpt

Explore linters, tools for automated code analysis that can capture syntactic, semantic, and stylistic errors in code. The post What Is Linting? first appeared on Baeldung on Computer Science. Related Stories How to Start Building an Operating System Raft Consensus Algorithm What Is a Monad?

## Suppressions of Suppressions

DevFeed: [Suppressions of Suppressions](<https://devfeed.tech/articles/suppressions-of-suppressions-36196.md>)

Original publisher: [Read original article](<https://overreacted.io/suppressions-of-suppressions/>)

Published: 2025-06-11T00:00:00Z

Content type: article

Language: en

Sources: [Dan Abramov](<https://devfeed.tech/sources/dan-abramov.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [ci](<https://devfeed.tech/topics/ci.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [ci](<https://devfeed.tech/tags/ci.md>), [code](<https://devfeed.tech/tags/code.md>), [false-positives](<https://devfeed.tech/tags/false-positives.md>), [lint](<https://devfeed.tech/tags/lint.md>), [linter](<https://devfeed.tech/tags/linter.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [rules](<https://devfeed.tech/tags/rules.md>)

### AI overview

The article examines lint-rule suppressions: they can handle false positives and gradual rule adoption, but suppressing certain rules may cause serious problems. It proposes a lint rule that prevents suppression of selected other rules and notes that this protection can itself be suppressed.

### Source excerpt

I heard you like linting.

## Linting a Swift package with swift-format

DevFeed: [Linting a Swift package with swift-format](<https://devfeed.tech/articles/linting-a-swift-package-with-swift-format-24550.md>)

Original publisher: [Read original article](<https://medium.com/snapp-mobile/linting-a-swift-package-with-swift-format-a887b4e95a1e?source=rss----bcd96e620b02---4>)

Author: Oleksii Kolomiiets

Published: 2025-01-27T08:59:47Z

Content type: tutorial

Language: en

Sources: [Snapp Mobile - Medium](<https://devfeed.tech/sources/snapp-mobile-medium.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [Xcode 16](<https://devfeed.tech/topics/xcode-16.md>), [developer tooling](<https://devfeed.tech/topics/developer-tooling.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [build](<https://devfeed.tech/tags/build.md>), [development-tools](<https://devfeed.tech/tags/development-tools.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>), [lint](<https://devfeed.tech/tags/lint.md>), [packages](<https://devfeed.tech/tags/packages.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swift-package-manager](<https://devfeed.tech/tags/swift-package-manager.md>), [xcode-16](<https://devfeed.tech/tags/xcode-16.md>)

### AI overview

This tutorial explains how to enable linting for a Swift package during its build process with the built-in swift-format tool included in the Xcode 16 toolchain. It covers creating a package, adding a package plugin, attaching the plugin to targets, and displaying a test warning during the build.

### Source excerpt

Linting your code is handy and effective way to keep your team's code style in shape. Nowadays it's hard to imagine a project without functionality that alerts developers with warnings or errors about issues in the code. It could be done with a simple script added to build phases. But what can you do when you don't have one? Packages are excluded from this option, but they still need to be maintained. Or at the very least, you'll feel much better knowing your package code is clean and consistent, and no one can make it messy without receiving a warning. This article explains how to enable linting for a package during its build process, using only the built-in swift-format tool -- no external libraries required. Preparation With Xcode 16, swift-format is included as part of the Xcode toolchain, eliminating the need for external libraries and making Swift file formatting more convenient. For more information, refer to the Getting swift-format section. 1. Create a package Launch Xcode and select File > New > Package from the menu. Chose Library and add the name to the package. 2. Add Plugin Package plugin is: Swift script that can be run as part of your buildA package could have plugins as extra, or be all about pluginsPackage plugins are available only within packageGeneral plugins can be made available to the outsideLets you access development tools on your machine More information about package plugins can be found in the Meet Swift Package plugins article. Start by creating a dedicated folder for all potential plugins, including the one you're currently working on. Ctrl + click on your package name in Xcode and select "New Folder" or use any other method to create a folder in the root of your project. Next, create a folder specifically for your plugin's logic. Since it will lint the package code using swift-format , the name SwiftFormatPlugin was chosen. By the end, the structure would look like this Now, let's add some content to plugin file import Foundation impor

## Lint Revisit: Providing Alternatives 🧙♀

DevFeed: [Lint Revisit: Providing Alternatives 🧙♀](<https://devfeed.tech/articles/lint-revisit-providing-alternatives-26175.md>)

Original publisher: [Read original article](<https://zarah.dev/2024/07/24/lintfix-alternatives.html>)

Author: Zarah Dominguez

Published: 2024-07-24T00:00:00Z

Content type: tutorial

Language: en

Sources: [Zarah Dominguez](<https://devfeed.tech/sources/zarah-dominguez.md>)

Topics: [enum](<https://devfeed.tech/topics/enum.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [enum](<https://devfeed.tech/tags/enum.md>), [github](<https://devfeed.tech/tags/github.md>), [jira](<https://devfeed.tech/tags/jira.md>), [lint](<https://devfeed.tech/tags/lint.md>), [regex](<https://devfeed.tech/tags/regex.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This tutorial shows how to extend a TODO Detector lint rule with project-specific ticket prefixes, regular-expression validation, autofix alternatives, and tests for those alternatives. It also discusses difficulty placing the caret precisely in the generated fix.

### Source excerpt

In my previous post, we updated our TODO Detector to be more flexible. It is also easily extensible so that if we want to include more parameters or perhaps add more checks, we can follow the existing pattern and modify it.

## Standardize GraphQL schema linting policies with GraphOS

DevFeed: [Standardize GraphQL schema linting policies with GraphOS](<https://devfeed.tech/articles/standardize-graphql-schema-linting-policies-with-graphos-23523.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/standardize-graphql-schema-linting-policies-with-graphos>)

Author: Vivek Ravishankar

Published: 2023-06-15T08:29:00Z

Content type: release

Language: en

Sources: [Apollo Blog](<https://devfeed.tech/sources/apollo-blog.md>)

Topics: [GraphOS](<https://devfeed.tech/topics/graphos.md>), [GraphQL](<https://devfeed.tech/topics/graphql.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>), [API](<https://devfeed.tech/topics/api.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Development](<https://devfeed.tech/topics/development.md>), [consistency](<https://devfeed.tech/topics/consistency.md>)

Tags: [announcement](<https://devfeed.tech/tags/announcement.md>), [apis](<https://devfeed.tech/tags/apis.md>), [ci-cd-pipeline](<https://devfeed.tech/tags/ci-cd-pipeline.md>), [cli](<https://devfeed.tech/tags/cli.md>), [consistency](<https://devfeed.tech/tags/consistency.md>), [graphos](<https://devfeed.tech/tags/graphos.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [lint](<https://devfeed.tech/tags/lint.md>), [linter](<https://devfeed.tech/tags/linter.md>), [schema](<https://devfeed.tech/tags/schema.md>)

### AI overview

Apollo GraphOS adds schema linting for GraphQL APIs. The checks validate predefined formatting and naming rules, run automatically when schema changes are published, and can also be run locally or in CI/CD pipelines with the Rover CLI. The feature is available to organizations on GraphOS Enterprise and Serverless plans.

### Source excerpt

When it comes to writing code collaboratively, consistency is everything. APIs are no exception. In fact, APIs are perhaps the most important place to ensure consistency, since they act as a vein for collaboration across nearly every developer in an organization's ecosystem. For GraphQL APIs, the schema is at the heart of all collaboration and consumption, but ensuring consistency in a graph that spans many teams, tools, and workflows is no easy task.

## Writing your own Nix Flake checks

DevFeed: [Writing your own Nix Flake checks](<https://devfeed.tech/articles/writing-your-own-nix-flake-checks-38561.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/writing-your-own-nix-flake-checks/>)

Author: Harsh Shandilya

Published: 2022-12-18T06:30:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Nix](<https://devfeed.tech/topics/nix.md>), [Shell](<https://devfeed.tech/topics/shell.md>)

Tags: [flake-checks](<https://devfeed.tech/tags/flake-checks.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [lint](<https://devfeed.tech/tags/lint.md>), [nix](<https://devfeed.tech/tags/nix.md>), [nix-flakes](<https://devfeed.tech/tags/nix-flakes.md>), [shell-script](<https://devfeed.tech/tags/shell-script.md>)

### AI overview

A practical guide to writing custom checks for Nix flakes. It explains how to define checks as derivations, run formatters and linters, satisfy Nix's output requirement, and reduce build overhead with a smaller stdenv.

### Source excerpt

Quick how-to for writing ad-hoc checks for your own Nix Flakes

## What is new in Nx 13.10?

DevFeed: [What is new in Nx 13.10?](<https://devfeed.tech/articles/what-is-new-in-nx-13-10-21459.md>)

Original publisher: [Read original article](<https://nx.dev/blog/what-is-new-in-nx-13-10>)

Author: Juri Strumpflohner

Published: 2022-04-08T00:00:00Z

Content type: release

Language: en

Sources: [Juri Strumpflohner](<https://devfeed.tech/sources/juri-strumpflohner.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Graphs](<https://devfeed.tech/topics/graphs.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [React](<https://devfeed.tech/topics/react.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [caching](<https://devfeed.tech/tags/caching.md>), [cli](<https://devfeed.tech/tags/cli.md>), [core](<https://devfeed.tech/tags/core.md>), [js](<https://devfeed.tech/tags/js.md>), [lint](<https://devfeed.tech/tags/lint.md>), [new-features](<https://devfeed.tech/tags/new-features.md>), [npm](<https://devfeed.tech/tags/npm.md>), [nx](<https://devfeed.tech/tags/nx.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [plugin-development](<https://devfeed.tech/tags/plugin-development.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [release](<https://devfeed.tech/tags/release.md>), [visualization](<https://devfeed.tech/tags/visualization.md>)

### AI overview

Nx 13.10 consolidates core and CLI functionality into a single package, introduces the Nx Daemon to cache and asynchronously recompute the project graph, and adds updates including local plugin development, enhanced visualization, new lint rules, and React 18 support.

### Source excerpt

Nx 13.10 brings core package consolidation, Nx Daemon by default, local plugin development, enhanced visualization, new lint rules, and React 18 support.

## Multi-module Lint Rules Follow Up: Suppressions ☠

DevFeed: [Multi-module Lint Rules Follow Up: Suppressions ☠](<https://devfeed.tech/articles/multi-module-lint-rules-follow-up-suppressions-26168.md>)

Original publisher: [Read original article](<https://zarah.dev/2022/02/15/deprecated-suppress.html>)

Author: Zarah Dominguez

Published: 2022-02-15T00:00:00Z

Content type: tutorial

Language: en

Sources: [Zarah Dominguez](<https://devfeed.tech/sources/zarah-dominguez.md>)

Topics: [modules](<https://devfeed.tech/topics/modules.md>), [XML](<https://devfeed.tech/topics/xml.md>), [test](<https://devfeed.tech/topics/test.md>), [selectors](<https://devfeed.tech/topics/selectors.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [deprecated](<https://devfeed.tech/tags/deprecated.md>), [errors](<https://devfeed.tech/tags/errors.md>), [lint](<https://devfeed.tech/tags/lint.md>), [module](<https://devfeed.tech/tags/module.md>), [selectors](<https://devfeed.tech/tags/selectors.md>), [test](<https://devfeed.tech/tags/test.md>), [tests](<https://devfeed.tech/tags/tests.md>), [xml](<https://devfeed.tech/tags/xml.md>)

### AI overview

A follow-up tutorial on adding suppression checks to a multi-module Lint rule that detects deprecated colours in XML files. It explains checking suppression before reporting issues and adding tests for suppressed usages in widgets and root layout elements.

### Source excerpt

It has been a hot minute since I posted about writing multi-module Lint rules so it's time for a follow up. Today's topic: suppressions! A quick recap of where we are:

## How to choose and automate the lint dependency version for a custom Android lint rule

DevFeed: [How to choose and automate the lint dependency version for a custom Android lint rule](<https://devfeed.tech/articles/pick-lint-version-26134.md>)

Original publisher: [Read original article](<https://vadzimv.dev/2021/07/28/calculate-lint-version.html>)

Author: Vadzimv Dev Blog

Published: 2021-07-28T15:00:00Z

Content type: tutorial

Language: en

Sources: [vadzimv Dev Blog](<https://devfeed.tech/sources/vadzimv-dev-blog.md>)

Topics: [Android Gradle Plugin](<https://devfeed.tech/topics/android-gradle-plugin.md>), [Android](<https://devfeed.tech/topics/android.md>), [Development](<https://devfeed.tech/topics/development.md>), [Automation](<https://devfeed.tech/topics/automation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [automation](<https://devfeed.tech/tags/automation.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [implement](<https://devfeed.tech/tags/implement.md>), [lint](<https://devfeed.tech/tags/lint.md>)

### AI overview

This tutorial explains how to choose a lint dependency version for a custom Android lint rule by deriving it from the Android Gradle Plugin version. It also describes automating the calculation through project properties and dependencies.

### Source excerpt

How to pick lint dependency version when you implement a custom lint rule for Android project.

## Enforcing Custom View Usage With Android Lint

DevFeed: [Enforcing Custom View Usage With Android Lint](<https://devfeed.tech/articles/enforcing-custom-view-usage-with-android-lint-22805.md>)

Original publisher: [Read original article](<http://androidessence.com/enforce-custom-views-with-lint/>)

Author: Adam McNeilly

Published: 2021-02-22T00:00:00Z

Content type: tutorial

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [components](<https://devfeed.tech/tags/components.md>), [customization](<https://devfeed.tech/tags/customization.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [lint](<https://devfeed.tech/tags/lint.md>)

### AI overview

This tutorial explains how to write a custom Android lint check that enforces the use of project-specific custom views instead of corresponding Android framework views in layout XML files.

### Source excerpt

Sometimes an Android project will have to implement a custom view that is an extension of an existing Android view. We may do this for style purposes, or to implement additional logic, or any number of customization purposes. This solution brings a new problem for our codebase - how do we enforce that other developers use our custom view, instead of the Android framework view? We can solve this problem by writing our own Android lint check.

## Kotlin Mumbai: Building a better codebase with Lint on Android

DevFeed: [Kotlin Mumbai: Building a better codebase with Lint on Android](<https://devfeed.tech/articles/kotlin-mumbai-building-a-better-codebase-with-lint-on-android-28377.md>)

Original publisher: [Read original article](<https://siddroid.com/post/post-august-kotlin-mumbai-2020-siddhesh-patil/>)

Author: Siddhesh Patil

Published: 2020-08-22T15:28:04Z

Content type: article

Language: en

Sources: [Sid Patil - Android Engineer and Kotlin Advocate](<https://devfeed.tech/sources/sid-patil-android-engineer-and-kotlin-advocate.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>), [test](<https://devfeed.tech/topics/test.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [best-android-developer-groups-in-india](<https://devfeed.tech/tags/best-android-developer-groups-in-india.md>), [building](<https://devfeed.tech/tags/building.md>), [code](<https://devfeed.tech/tags/code.md>), [coding](<https://devfeed.tech/tags/coding.md>), [developer-communities-in-mumbai](<https://devfeed.tech/tags/developer-communities-in-mumbai.md>), [event](<https://devfeed.tech/tags/event.md>), [google-developer-experts](<https://devfeed.tech/tags/google-developer-experts.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-user-group-mumbai](<https://devfeed.tech/tags/kotlin-user-group-mumbai.md>), [kug](<https://devfeed.tech/tags/kug.md>), [lint](<https://devfeed.tech/tags/lint.md>), [smallcase](<https://devfeed.tech/tags/smallcase.md>), [subhrajyoti-sen-gde-for-android](<https://devfeed.tech/tags/subhrajyoti-sen-gde-for-android.md>), [talk](<https://devfeed.tech/tags/talk.md>), [talks](<https://devfeed.tech/tags/talks.md>), [test](<https://devfeed.tech/tags/test.md>), [using-lint-on-android](<https://devfeed.tech/tags/using-lint-on-android.md>), [write-lint-rules-on-android](<https://devfeed.tech/tags/write-lint-rules-on-android.md>), [youtube](<https://devfeed.tech/tags/youtube.md>)

### AI overview

A Kotlin Mumbai talk explains how Android Lint and custom lint rules can enforce coding guidelines, detect common bugs, and improve codebases. It covers Lint internals, custom rule development, and testing lint rules.

### Source excerpt

On popular demand, the Lint API was extended to support non-Android Kotlin projects. In this talk Subhrajyoti Sen talks about using lint rules to build better codebases on Android.

## Ruby Madness - Right Hand If Statements and Syntax Error, Unexpected end-of-input, Expecting End

DevFeed: [Ruby Madness - Right Hand If Statements and Syntax Error, Unexpected end-of-input, Expecting End](<https://devfeed.tech/articles/ruby-madness-right-hand-if-statements-and-syntax-error-unexpected-end-of-input-expecting-end-28302.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/ruby/2019/11/07/ruby-madness-right-hand-if-statements-and-syntax-error-unexpected-end-of-input-expecting-end.html>)

Author: Fuzzygroup

Published: 2019-11-07T00:00:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [Code](<https://devfeed.tech/topics/code.md>), [Parser](<https://devfeed.tech/topics/parser.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [issue](<https://devfeed.tech/tags/issue.md>), [lint](<https://devfeed.tech/tags/lint.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

A Ruby syntax error reported at the end of a class can result from an earlier right-hand if statement that appends nothing to an array. The article shows how to use ruby -c and progressively reduce the file to locate the subtle parsing problem, then presents the corrected method.

### Source excerpt

The Eagle's Nest AirBnB Cabin on the Ohio River; One of my favorite places... Last night I was on a coding tear, that moment when the solution is just crystal clear. That situation where something you've struggled with for days / weeks / months and then it all comest together. The result of this was a whole bunch of code stuck in a single model and then this morning when I was ready to run it across the entire dataset, I got this crap: ruby -c app/models/habit.rb app/models/habit.rb:592: syntax error, unexpected end-of-input, expecting end I censored hate this error. Line 592 is the end of the class and that means that the ruby parser just blithely skipped to the end and really has no useful positional information for you. Note: If you're not familiar with ruby -c, it is a syntax checker that makes sure your file is parseable. Think of it as a poor man's lint. My usual approach to finding this error is to cut our half the code in the file and then re-run the ruby -c process. And then repeat that until you get this: ruby -c app/models/habit.rb Syntax OK And that's how I ended up finding the error but the error was ridiculously subtle. Here's the error: def self.with_feeds habits_with_feeds = [] Habit.active.each do |habit| habits_with_feeds << if habit.has_feed? end habits_with_feeds end And here's the corrected version of the method: def self.with_feeds habits_with_feeds = [] Habit.active.each do |habit| habits_with_feeds << habit if habit.has_feed? end habits_with_feeds end Now, this is subtle, so I'm going to just call it out. The issue was this line: habits_with_feeds << habit if habit.has_feed? versus habits_with_feeds << if habit.has_feed? Clearly, to the ruby parser, the lack of something being added to the array qualifies as a missing end. Yeah I get that but damn. I'm personally a huge fan of right hand if statements due to the reduction of 3 lines down to 1 but this is a case where they bit me hard. Sigh.

## Git: check if a folder changed

DevFeed: [Git: check if a folder changed](<https://devfeed.tech/articles/git-check-if-a-folder-changed-37721.md>)

Original publisher: [Read original article](<https://carlosbecker.com/posts/git-changed/>)

Author: Carlos Alexandro Becker

Published: 2019-04-11T00:00:00Z

Content type: tutorial

Language: en

Sources: [Carlos Becker](<https://devfeed.tech/sources/carlos-becker.md>)

Topics: [Git](<https://devfeed.tech/topics/git.md>), [Script](<https://devfeed.tech/topics/script.md>)

Tags: [branch](<https://devfeed.tech/tags/branch.md>), [changes](<https://devfeed.tech/tags/changes.md>), [deploy](<https://devfeed.tech/tags/deploy.md>), [files](<https://devfeed.tech/tags/files.md>), [git](<https://devfeed.tech/tags/git.md>), [lint](<https://devfeed.tech/tags/lint.md>)

### AI overview

A quick guide to checking whether files in a folder changed between Git revisions, including comparisons with the current branch or a previous tag. The technique can conditionally deploy changed folders or lint changed files.

### Source excerpt

Often I need to "do X only if files on some folder changed" or whatever. I always need to Google that or find it on old scripts...

## Improve productivity with TypeScript and lifecycle hooks for Cloud Functions

DevFeed: [Improve productivity with TypeScript and lifecycle hooks for Cloud Functions](<https://devfeed.tech/articles/improve-productivity-with-typescript-and-lifecycle-hooks-for-cloud-functions-16243.md>)

Original publisher: [Read original article](<https://firebase.blog/posts/2017/12/improve-productivity-with-typescript>)

Author: Thomas Bouldin

Published: 2017-12-08T00:00:00Z

Content type: release

Language: en

Sources: [Firebase Blog](<https://devfeed.tech/sources/firebase-blog.md>)

Topics: [TypeScript](<https://devfeed.tech/topics/typescript.md>), [Cloud Functions](<https://devfeed.tech/topics/cloud-functions.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [cloud-functions](<https://devfeed.tech/tags/cloud-functions.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [firebase-cli](<https://devfeed.tech/tags/firebase-cli.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [lint](<https://devfeed.tech/tags/lint.md>), [linter](<https://devfeed.tech/tags/linter.md>), [typescript](<https://devfeed.tech/tags/typescript.md>)

### AI overview

The Firebase CLI added first-class TypeScript support for Cloud Functions starting with version 3.16.0. New TypeScript projects are configured for compilation, automatic transpilation during deployment, and recommended linting with TSLint. The article also explains lifecycle hooks such as predeploy and postdeploy.

### Source excerpt

News, tutorials, and updates from the Firebase team.

## Droidcon Italy recap

DevFeed: [Droidcon Italy recap](<https://devfeed.tech/articles/droidcon-italy-recap-28644.md>)

Original publisher: [Read original article](<https://jeroenmols.com/blog/2016/04/08/droidconit/>)

Author: info@jeroenmols.com (Jeroen Mols)

Published: 2016-04-08T00:00:00Z

Content type: article

Language: en

Sources: [Jeroen Mols](<https://devfeed.tech/sources/jeroen-mols.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [User Experience](<https://devfeed.tech/topics/user-experience.md>), [App](<https://devfeed.tech/topics/app.md>), [render](<https://devfeed.tech/topics/render.md>), [APK](<https://devfeed.tech/topics/apk.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Gson](<https://devfeed.tech/topics/gson.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [apk](<https://devfeed.tech/tags/apk.md>), [app](<https://devfeed.tech/tags/app.md>), [app-development](<https://devfeed.tech/tags/app-development.md>), [app-performance](<https://devfeed.tech/tags/app-performance.md>), [blogs](<https://devfeed.tech/tags/blogs.md>), [conference](<https://devfeed.tech/tags/conference.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [design](<https://devfeed.tech/tags/design.md>), [designer](<https://devfeed.tech/tags/designer.md>), [developer](<https://devfeed.tech/tags/developer.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [droidcon](<https://devfeed.tech/tags/droidcon.md>), [experience](<https://devfeed.tech/tags/experience.md>), [gson](<https://devfeed.tech/tags/gson.md>), [lint](<https://devfeed.tech/tags/lint.md>), [performance](<https://devfeed.tech/tags/performance.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [recap](<https://devfeed.tech/tags/recap.md>), [tools](<https://devfeed.tech/tags/tools.md>)

### AI overview

A recap of Droidcon Italy covering collaboration between developers and designers to improve user experience, Android layout rendering performance, and reducing DEX method counts through APK analysis, Proguard configuration, dependency cleanup, and tools such as ClassyShark.

### Source excerpt

A conference about our favorite Green little robots? In sunny Italy? With great food and a party? Yeah, I can image how you must feel in case you missed it... I on the other hand was fortunate enough to attend and speak at this awesome conference.

## FragmentArgs 3.0

DevFeed: [FragmentArgs 3.0](<https://devfeed.tech/articles/fragmentargs-3-0-25446.md>)

Original publisher: [Read original article](<https://hannesdorfmann.com/android/fragmentargs3/>)

Author: Hannes Dorfmann

Published: 2015-11-02T09:00:00Z

Content type: release

Language: en

Sources: [Hannes Dorfmann](<https://devfeed.tech/sources/hannes-dorfmann.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Android Library](<https://devfeed.tech/topics/android-library.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [apt](<https://devfeed.tech/tags/apt.md>), [compatibility](<https://devfeed.tech/tags/compatibility.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lint](<https://devfeed.tech/tags/lint.md>), [new-features](<https://devfeed.tech/tags/new-features.md>), [release](<https://devfeed.tech/tags/release.md>)

### AI overview

FragmentArgs 3.0 is a major release for Android that adds the @FragmentWithArgs annotation, deprecates @FragmentArgsInherited, improves generated Builder annotations and setter-method support, and supports Kotlin through kapt. The release is backward compatible with versions 1.0 and later.

### Source excerpt

I finally found some time last weekend to work on FragmentArgs and to release a new major version 3.0. Here is an overview of new features and bug fixes. Migration The good news first: FragmentArgs 3.0 is completely backward compatible to all previous versions (down to 1.0). So basically you have to do nothing.

## The power of TextView (Part 1): Drawables

DevFeed: [The power of TextView (Part 1): Drawables](<https://devfeed.tech/articles/the-power-of-textview-part-1-drawables-27228.md>)

Original publisher: [Read original article](<https://antonioleiva.com/textview_power_drawables>)

Published: 2014-01-30T00:00:00Z

Content type: tutorial

Language: en

Sources: [Antonio Leiva](<https://devfeed.tech/sources/antonio-leiva.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [XML](<https://devfeed.tech/topics/xml.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [code](<https://devfeed.tech/tags/code.md>), [layout](<https://devfeed.tech/tags/layout.md>), [lint](<https://devfeed.tech/tags/lint.md>), [properties](<https://devfeed.tech/tags/properties.md>), [textview](<https://devfeed.tech/tags/textview.md>)

### AI overview

This Android tutorial explains how TextView compound drawables can place images beside text using drawableLeft, drawableRight, drawableTop, drawableBottom, and drawablePadding. It shows how this approach can replace a LinearLayout and ImageView, reducing layout complexity and simplifying XML.

### Source excerpt

Everything Android, Kotlin and other random topics

## Raking Podspecs

DevFeed: [Raking Podspecs](<https://devfeed.tech/articles/raking-podspecs-25380.md>)

Original publisher: [Read original article](<https://smileykeith.com/2013/01/04/raking-podspecs/>)

Author: Keith Smiley

Published: 2013-01-04T19:09:00Z

Content type: article

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [rubygems](<https://devfeed.tech/topics/rubygems.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [pull-requests](<https://devfeed.tech/topics/pull-requests.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [lint](<https://devfeed.tech/tags/lint.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [repo](<https://devfeed.tech/tags/repo.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [rubygems](<https://devfeed.tech/tags/rubygems.md>), [tool](<https://devfeed.tech/tags/tool.md>), [tools](<https://devfeed.tech/tags/tools.md>), [travis](<https://devfeed.tech/tags/travis.md>)

### AI overview

The article describes automating CocoaPods podspec linting across multiple Ruby versions with rbenv and a Rakefile.

### Source excerpt

I spend a decent amount of time these days helping maintain the CocoaPods specs repo by managing pull requests and issues. CococaPods is an awesome dependency manager similar to Rubygems for Objective-C projects. Unfortunately a lot of submitted podspecs haven't been correctly formatted or they're missing required information. CocoaPods has an awesome build in command pod spec lint that allows you to make sure the spec is valid and complete. Understandably people who are new to CocoaPods trying to submit their libraries are unaware of this awesome tool. Therefore when I look through the pull requests, I like to lint them myself (CocoaPods does utilize Travis but unfortunately it can't do everything). Since CocoaPods supports multiple versions of Ruby (1.8.7 and 1.9.3) to be complete ideally you'd lint them on both versions. Tools like RVM and rbenv(my tool of choice) make it easy to quickly switch between different versions of Ruby using .rvmrc and .rbenv-version respectively. As you can probably assume I wanted to automate this. So I wrote a quick Rakefile to do this for me. #!/usr/bin/env rake # NOTE: Must be using rbenv 4.0 to use `system` and `.ruby-version` ## Set your preferred ruby versions $V18 = 'system' $V19 = '1.9.3-p385' $RBENV = '.ruby-version' # The gem to use $GEM = 'cocoapods' task :default => :lint task :c => :clean desc "Lint podspecs on multiple versions of ruby with rbenv" task :lint do if Dir.glob('*.podspec').count < 1 puts "No podspecs in #{ Dir.pwd }" exit end existed = versionFileExists? if existed old_version = currentVersion end # Loop through all podspecs Dir.glob('*.podspec').each do |file| # Loop through ruby versions 2.times do |x| version = x == 0 ? $V18 : $V19 writeVersion(version) puts "Linting #{ file } on Ruby version #{ currentVersion }" puts lint(file) end end # If the dotfile already existed rewrite the original code if existed writeVersion(old_version) else File.delete($RBENV) if versionFileExists? end end desc "Delete all pod

## lintswitch: Automatically run pylint / jslint on your code

DevFeed: [lintswitch: Automatically run pylint / jslint on your code](<https://devfeed.tech/articles/lintswitch-automatically-run-pylint-jslint-on-your-code-35431.md>)

Original publisher: [Read original article](<https://darkcoding.net/software/lintswitch-automatically-run-pylint-jslint-on-your-code/>)

Author: Graham King

Published: 2010-12-13T21:28:07Z

Content type: article

Language: en

Sources: [Graham King](<https://devfeed.tech/sources/graham-king.md>)

Topics: [Script](<https://devfeed.tech/topics/script.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [Unix](<https://devfeed.tech/topics/unix.md>), [Development](<https://devfeed.tech/topics/development.md>), [Software](<https://devfeed.tech/topics/software.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [code](<https://devfeed.tech/tags/code.md>), [development](<https://devfeed.tech/tags/development.md>), [file](<https://devfeed.tech/tags/file.md>), [imagemagick](<https://devfeed.tech/tags/imagemagick.md>), [lint](<https://devfeed.tech/tags/lint.md>), [programming](<https://devfeed.tech/tags/programming.md>), [python](<https://devfeed.tech/tags/python.md>), [script](<https://devfeed.tech/tags/script.md>), [software](<https://devfeed.tech/tags/software.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [unix](<https://devfeed.tech/tags/unix.md>), [workflow](<https://devfeed.tech/tags/workflow.md>)

### AI overview

The article introduces lintswitch, a small Bash script that watches files with incron, runs pylint, pep8, and jslint, and displays lint results through desktop notifications and ImageMagick. It is designed to provide background code linting without interrupting the developer workflow unless errors occur.

### Source excerpt

"Keep your code clean with lintswitch's constant, unobtrusive background linting."