Skip to content
DevMeme
4517 of 7435
When the linter calls out your ‘blackListUrls’ variable for non-inclusive language
CodeQuality Post #4957, on Oct 28, 2022 in TG

When the linter calls out your ‘blackListUrls’ variable for non-inclusive language

Why is this CodeQuality meme funny?

Level 1: Use Nice Words

Imagine you’re making a list of websites that are not allowed to visit. You decide to call it your “bad websites list.” Now, think of your computer or a teacher looking at that and saying, “Hmm, that name might hurt feelings or sound mean. Let’s call it the ‘blocked websites list’ instead.” In the meme, the programmer called their list of forbidden URLs a “blacklist,” which was a common word for it. But the computer program (a helper that checks code) popped up and basically said, “Please use a nicer word.” It’s a funny moment because the programmer wasn’t trying to be mean at all – they were just using a familiar term – but the computer is acting a bit like a teacher correcting them. The core of the joke is that even our code has to mind its language now. It’s like being politely scolded for saying a not-so-nice word, and it reminds us that words matter, even inside a computer program.

Level 2: Polite Programming

So, what exactly are we seeing in this meme? It’s a screenshot of code inside an IDE (Integrated Development Environment) like Xcode or Android Studio, where a linter is giving feedback on the code. A linter is basically a tool that reviews your source code for issues – sort of like a spellchecker or grammar checker, but for programming. Linters usually catch things like syntax errors, unsafe code, or style guideline violations. Here, it’s catching a NamingConventions issue related to InclusiveLanguage. The code declares a variable named blackListUrls (likely meant to store a set of URLs that are blocked or disallowed). The linter pops up a warning saying this name isn’t considered inclusive language. In other words, the tool is telling the developer, “Hey, the word blacklist might not be a great choice of wording. Maybe use a different term.”

Why would a word like “blacklist” trigger a warning? In programming (and many other fields), “blacklist” traditionally means a list of forbidden or blocked items, and “whitelist” means a list of allowed items. These terms have been around for ages. However, there’s been a recent push to use more neutral terminology. The concern is that associating “black” with bad and “white” with good can carry unintended racial connotations or just feel exclusionary. It’s part of a larger effort to make tech language more inclusive and welcoming. So, instead of “blacklist,” many style guides suggest terms like “blocklist,” “denylist,” or “disallow list.” Instead of “whitelist,” they’d say “allowlist” or “permit list.” This inclusive language initiative also targets other terms: for example, replacing “master/slave” in databases with “primary/replica” or “leader/follower.” It’s all about choosing words that describe things without drawing on old metaphors that might be insensitive.

In the screenshot, the linter’s tooltip message explicitly calls it an “Inclusive Language Violation.” That sounds serious, but it’s essentially a gentle scolding to rename your variable. The (inclusive_language) part likely refers to the rule ID or category set up in the linter’s configuration. Many companies and open-source projects have added such rules to their CodingStandards. For instance, if you’re using Swift and have SwiftLint configured, there is indeed an inclusive language rule that will flag words like “blacklist.” Similarly, in a Kotlin project, a linter or static analysis tool might flag it if you have those checks enabled. Even text editors and code platforms (like GitHub or GitLab with their CI pipelines) can be configured to reject code containing banned terms.

For a newer developer (junior perspective), this can be a bit surprising. You might be thinking: “I just named my variable something logical – a list of URLs to blacklist – and now my editor is complaining about it?” It almost feels like the computer is nitpicking your word choice, not your logic. But understanding why pays off. It’s teaching you that writing software isn’t just about making it run; it’s also about how other people will read and feel about the code. VariableNaming matters because code is a collaborative, human endeavor. If a term might make someone uncomfortable or is rooted in negative stereotypes, it can be worth changing. And practically speaking, terms like “allowlist/denylist” are also more self-explanatory to someone who doesn’t know the old idioms – they literally describe what the list does (allows or denies) without extra interpretation. So it improves clarity too.

Let’s break down the scene: the code var blackListUrls: Set<String> = [...] is defining a set of URLs. Maybe this is part of some filtering feature (like blocking certain domains). The programmer chose the name blackListUrls out of habit or clarity. The IDE, with the linter’s help, immediately underlines it or shows that yellow warning triangle. When the developer hovers or clicks it, they see the expanded warning: “Declaration blackListUrls contains the term ‘blacklist’ which is not considered inclusive.” It’s basically a built-in naming coach. The developer now has a choice: ignore it (maybe it’s just a warning, not an error) or heed it and rename the variable. Often, these tools also suggest a fix. If you’ve ever seen quick-fix suggestions in editors (like a lightbulb icon), it might even propose something like “Rename to ‘blockListUrls’.” The meme doesn’t show a suggestion, but that’s a common feature. The comment in the code (// will be removed when API ...) suggests this is real working code and the dev was making a note to remove these URLs later – and now an unexpected critique appears about the variable name itself.

From a learning standpoint, a junior dev encountering this might learn about inclusive terminology for the first time. It’s a teachable moment: Oh, our project avoids the word “blacklist.” Got it. It’s similar to how you learn to follow code style guidelines (like naming variables likeThis in camelCase or not using var in Kotlin if you can use val, etc.). At first, some rules feel arbitrary, but they usually have reasons. In this case, the reason is about being considerate with language.

It’s also worth noting that these linter rules reflect team or community decisions. Not every codebase will have an inclusive language rule turned on, but many do nowadays. If you create a new app in Xcode with certain templates or use a company’s base project setup, they might include a script or configuration enabling these warnings. It’s part of the culture of software craftsmanship: code isn’t just judged by what it does, but also by how clearly and considerately it’s written. Tooling in IDEs_Editors has gotten sophisticated enough to check your code on the fly and provide this kind of feedback. Good DeveloperExperience means the tools help you catch things early – whether it’s a potential null crash or a word choice that your team wants to avoid.

In summary, at this level we explain that the meme is showing a code linter enforcing a naming convention to avoid potentially insensitive terms. The developer is being nudged to rename blackListUrls to a more inclusive alternative. It’s both an educational reminder built into the coding workflow and a source of bemusement for developers who might not expect their IDE to comment on their word choice. But it’s all part of writing cleaner, considerate code.

// 🚫 The linter flags this name:
var blackListUrls: Set<String> = ["marketingcloudapis.com", "ecmcontent/ECM"]

// ✅ More inclusive name (no warning):
var blockListUrls: Set<String> = ["marketingcloudapis.com", "ecmcontent/ECM"]

(In the example above, simply changing “blackList” to “blockList” or “denyList” would satisfy the linter and follow modern naming guidelines.)

Level 3: Blacklists Are Blacklisted

The meme humorously spotlights a modern twist in CodeQuality: our tools now enforce social-conscious coding standards. In the screenshot, a Swift/Kotlin-style variable declaration var blackListUrls: Set<String> triggers a linter warning:

Inclusive Language Violation: Declaration blackListUrls contains the term "blacklist" which is not considered inclusive. (inclusive_language)

This isn’t your usual null-pointer or type-mismatch warning. It’s the IDE acting as language police, flagging a NamingConventions breach. The term “blacklist” is literally blacklisted by the project’s coding standards. For seasoned devs, this mash-up of social values and code is both surprising and a shared chuckle. Ten years ago, linters griped about semicolons or unused variables. Now they’ll scold your variable names for not being woke enough. It’s a sign of how DeveloperExperience_DX has evolved: static analysis tooling isn’t just about performance and bugs, but also about the words and metaphors we embed in our code.

Why is this funny? It’s the collision of two worlds. Here you are, chasing down actual bugs or implementing features, and suddenly your IDE throws a yellow warning tooltip about inclusivity. It’s like being in the middle of a serious algorithm crunch and someone taps on your shoulder to remind you to watch your language – literally. The developer in this scenario might sigh, half-smiling, “Really? The linter cares about my phrasing now?” Seasoned engineers have countless war stories of battling LintingRules for trivial style issues at 2 AM; now the linter has a new trick: moral advisor.

Behind the scenes, this inclusive language check is typically a configurable rule in a lint tool (for Swift, think SwiftLint, or in general SonarLint/IDE plugins). Such tools maintain a list of problematic terms and suggest alternatives. The rule here (noted as (inclusive_language) in the message) likely scans identifiers and strings for terms like “blacklist” or “whitelist.” It’s a simple pattern match, but its implications run deep. VariableNaming is no longer just about clarity or camelCase – it’s about avoiding historically charged words. The term “blacklist” has long meant a list of banned items (URLs, in this case), paired with “whitelist” for allowed items. Many CodingStandards now consider these terms non-inclusive because of the “black = bad, white = good” implication. Instead, developers are asked to use neutral terms like “blocklist” (or denyList) and “allowList.” In fact, the linter is effectively saying: “Hey, rename blackListUrls to something like blockListUrls to comply with our inclusive naming policy.”

This reflects a broader industry movement: tech teams auditing their lexicon the same way they audit their dependencies for security. In 2020, major organizations and open-source projects began purging non-inclusive terminology. Version control platforms changed “master” branches to “main.” Database replicas stopped being called “slaves.” And yes, “blacklists” got blacklisted in favor of “denylists.” Those of us who maintain legacy code (and possibly a bit of cynicism) remember how much fun it was renaming variables across thousands of lines – not because the code was broken, but because the words were. It’s a different kind of refactor: one aimed at cultural correctness.

From a senior engineer’s perspective, the meme nails an experience that’s both commendable and a tad absurd. Commendable because inclusive language in code can foster a more welcoming environment – code is written for humans to read, after all, not just machines. If certain terms can alienate or hurt, it’s a noble cause to replace them. But absurd because, well, it’s a machine tool enforcing this, mid-edit, with the same stern tone it uses for null pointer warnings. There’s dark humor in seeing a IDE_tooltip_message schooling you on sensitivity: the code compiles just fine, but you still get a virtual finger-wag for saying “blacklist.” It’s as if your compiler picked up an HR minor.

Yet, beyond the joke, experienced devs know these warnings are usually mandates from on high (the CodingStandards doc or a company policy). The linter isn’t being arbitrarily picky – someone (perhaps the DevOps team or an open-source community) decided to turn on this inclusive_language_linter_warning rule. In continuous integration pipelines, such warnings might even fail the build if not addressed, effectively policing compliance. Picture a production incident post-mortem where the root cause analysis reads: “Deployment failed because of non-inclusive variable naming.” It sounds absurd, but it happens! The meme’s comedy taps into that exaggeration and the slight exasperation of developers caught between shipping features and appeasing the ever-growing list of quality checks.

In short, at this highest level we’re laughing at the intersection of programming culture and social consciousness. The linter calling out blackListUrls encapsulates the reality that code doesn’t live in a vacuum: even our variable names carry weight. It’s both a facepalm and a nod of agreement – we grumble at the nuisance, even as we understand the good intention. And until you fix that name, that friendly yellow warning isn’t going anywhere.

Description

Screenshot of a dark-theme IDE editor showing a line of Swift/Kotlin-style code: “var blackListUrls: Set<String> = [”. Immediately above, a yellow warning tooltip is expanded that reads: “Inclusive Language Violation: Declaration blackListUrls contains the term "blacklist" which is not considered inclusive. (inclusive_language)”. Additional array items like "marketingcloudapis.com" and a comment “// will be removed when API …” are visible beneath the declaration. The scene humorously captures modern static-analysis tooling enforcing inclusive naming, illustrating how code linters now flag terms such as “blacklist/whitelist” in the pursuit of better language practices and code quality

Comments

34
Anonymous ★ Top Pick Merge blocked: “‘blacklist’ isn’t inclusive.” Merge passes: LegacySingletonGodObject.swift - 4 k LOC, 17 circular deps, force-unwraps everywhere. Apparently empathy now has higher test coverage than safety
  1. Anonymous ★ Top Pick

    Merge blocked: “‘blacklist’ isn’t inclusive.” Merge passes: LegacySingletonGodObject.swift - 4 k LOC, 17 circular deps, force-unwraps everywhere. Apparently empathy now has higher test coverage than safety

  2. Anonymous

    After 20 years of writing 'master/slave' database configs and 'blacklist/whitelist' filters, the hardest refactoring isn't migrating from COBOL to microservices - it's convincing your muscle memory that 'denylist' won't cause a production outage

  3. Anonymous

    Nothing says 'we've solved all our technical debt' quite like your IDE spending CPU cycles to police variable names while your monolith is held together with duct tape and a 15-year-old COBOL integration. At least when the system goes down, we can take comfort knowing our crash logs use inclusive terminology

  4. Anonymous

    Set inclusive_language to error and a “five‑minute rename” became a cross‑service schema migration spanning DB columns, protobufs, metrics, and cache keys - the only thing that’s ever successfully blocked a Friday deploy

  5. Anonymous

    Enterprise linting: Fighting microaggressions while your monolith silently bleeds technical debt

  6. Anonymous

    Lint blocks deploy on “blackListUrls”; renaming to “denyList” breaks the public API, so we ship typealias LegacyBlackListUrls = DenyListUrls and call it inclusivity via the Adapter pattern

  7. @kandiesky 3y

    What the fuck?

    1. @kitbot256 3y

      Many companies’ internal documents now recommend using “blocklist” instead.

  8. @VolodymyrMeInyk 3y

    master/slave

    1. @SamsonovAnton 3y

      What about BDSM practitioners? Don't they deserve to be "included"? 😁

      1. @sylfn 3y

        their master/slave should be renamed too

    2. @RiedleroD 3y

      I intentionally use the master branch in git repos, because I decide if I want to change stuff like this. Companies are not to decide what language I'm supposed to use.

  9. @k_scranton 3y

    <...> According to the remark, the term 'blacklist' evolved from the term 'black book' about a century ago. The term 'black book' does not appear to have any etymology or sources that support racial associations, instead originating in the 1400s as a reference to "a list of people who had committed crimes or fallen out of favor with leaders," and popularized by King Henry VIII's literal use of a black book.

  10. @Kornet_EM 3y

    nlist

  11. @rglrd 3y

    Niggas

  12. @ashutka 3y

    notWhiteList here, I fixed it

  13. @tymchasovinegarazdy 3y

    I'm pretty sure all the laughing commenters wouldn't be laughing if there was something like katsapList / khokholList / moskalList

    1. @Svistoplyaz 3y

      I get your point, but your comparison is incorrect. Your proposal uses deliberate swearing. Why didn't you compare the original phrase with whiteList?

      1. @tymchasovinegarazdy 3y

        If you don't see the problem with (white-)blacklist names I have nothing to reply 🤷‍♂️

        1. @saniel42 3y

          You shouldn't have replied in the first place 🤠

    2. @LionElJonson 3y

      Your comparison would be okay if it was niggerList / crackerList

      1. @Johnny_bit 3y

        I dare anyone to use it in real code :P

        1. @Algoinde 3y

          i knew a guy who exclusively used the first type as debug strings and variables

    3. @RiedleroD 3y

      brb calling my blocklist russian slurs

  14. @trainzman 3y

    Last index of slice is not inclusive, let's cancel it then??

  15. @MagnusEdvardsson 3y

    How is a book with black covers racist? It's the color of the book in which banned people was listed.

  16. @theu_u 3y

    I literally know guy who named modules like HoholPidor. Because his co-worker wrote comments in Ukrainian language :)

  17. @karim_mahyari 3y

    There was a time, when social activists were social activists (and didn't police around everything.)

  18. @azizhakberdiev 3y

    imagine that github sends you a warning about violent language in code

  19. Егор 3y

    Finally, a solution to all economic and political problems in the world.

  20. Spongey 3y

    the ide can keep coping while i push code to master branch

  21. @Agent1378 3y

    Will it allow spanish version, like negroList ?

  22. @Araalith 3y

    Because it's blocklist / allowlist. But I'm wondering how to change greylist...

  23. @Araalith 3y

    Or even git with a master branch (atm: main)

Use J and K for navigation