[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-tyOlZSNuskEj56NcpOE_gkJt04VutPBF1MVCsNstKwg":3,"sanity-3lZW60_iusx8DCfL0lVhNOqt1M09wMTykfajIxU9clw":941},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":916},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"4d0175f4-40a8-47eb-9bb3-a453b326aa7d","2026-07-03T07:40:00.000Z",{"_type":10,"current":11},"slug","the-good-the-bad-and-the-ai-apps",null,"The good, the bad, and the AI apps",[15,21,27,33],{"_id":16,"publishedAt":17,"slug":18,"title":20},"eb5b66eb-9410-4329-83bb-22bbff39402a","2026-04-28T13:00:00.000Z",{"_type":10,"current":19},"turn-scattered-knowledge-into-trusted-intelligence","Turning scattered knowledge into trusted intelligence: Stack Internal 2026.3",{"_id":22,"publishedAt":23,"slug":24,"title":26},"369c2401-b62e-4a37-8ff8-bf603023ecad","2026-03-02T15:03:00.988Z",{"_type":10,"current":25},"what-s-new-at-stack-overflow-march-2026","What’s new at Stack Overflow: March 2026",{"_id":28,"publishedAt":29,"slug":30,"title":32},"5e9053a4-07ea-447c-91ea-29e0b6228537","2026-02-02T15:00:00.000Z",{"_type":10,"current":31},"what-s-new-at-stack-overflow-february-2026","What’s new at Stack Overflow: February 2026",{"_id":34,"publishedAt":35,"slug":36,"title":38},"a1b538eb-a8a6-46d0-80a1-ac70ec9bb935","2026-01-05T10:00:00.000-05:00",{"_type":10,"current":37},"what-s-new-at-stack-overflow-january-2026","What’s new at Stack Overflow: January 2026",{"_createdAt":40,"_id":41,"_rev":42,"_type":43,"_updatedAt":44,"author":45,"body":61,"comments":882,"dateUrl":883,"excerpt":884,"image":885,"legacyBody":888,"product":12,"publishedAt":891,"slug":892,"sponsored":12,"tags":894,"title":915,"visible":882},"2023-05-25T09:39:15Z","wp-post-16261","dgl3SCUzppW3U2LvCoSnq8","blogPost","2023-07-13T14:55:40Z",[46],{"_createdAt":47,"_id":48,"_rev":49,"_type":50,"_updatedAt":51,"avatar":52,"employee":57,"name":58,"slug":59},"2023-05-23T16:27:18Z","wp-author-188","dgl3SCUzppW3U2LvCpMj1o","blogAuthor","2023-08-29T20:06:25Z",{"_type":53,"asset":54},"image",{"_ref":55,"_type":56},"image-7ae4cf96f5c09c91aad2e5cee51f94726989cec3-1024x1024-jpg","reference","former","Medi Madelen Gwosdz",{"current":60},"mgwosdz",[62,96,105,113,145,153,161,169,177,185,193,201,209,217,225,240,250,302,310,318,326,334,342,350,358,366,374,390,417,444,463,482,501,509,517,525,559,567,582,627,650,683,691,714,736,753,779,787,824,864],{"_key":63,"_type":64,"children":65,"markDefs":89,"style":95},"7882bb87877d","block",[66,71,76,80,85],{"_key":67,"_type":68,"marks":69,"text":70},"7882bb87877d0","span",[],"Linters are continually evolving. At the core, ",{"_key":72,"_type":68,"marks":73,"text":75},"7882bb87877d1",[74],"e55575ab163c","Wikipedia",{"_key":77,"_type":68,"marks":78,"text":79},"7882bb87877d2",[]," defines them as tools to analyze “source code to flag programming errors, bugs, stylistic errors, and suspicious constructs.” Linting can be seen as a static analysis that ",{"_key":81,"_type":68,"marks":82,"text":84},"7882bb87877d3",[83],"9ffc51266335","happens outside of a compiler",{"_key":86,"_type":68,"marks":87,"text":88},"7882bb87877d4",[],"; that is, they process and examine source code without compiling it into a binary.",[90,93],{"_key":74,"_type":91,"href":92,"reference":12},"link","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLint_(software)",{"_key":83,"_type":91,"href":94,"reference":12},"http:\u002F\u002Fjamie-wong.com\u002Fpost\u002Fbending-the-pl-curve\u002F","normal",{"_key":97,"_type":64,"children":98,"markDefs":103,"style":104},"ef4aeb3176e4",[99],{"_key":100,"_type":68,"marks":101,"text":102},"ef4aeb3176e40",[],"What linters can do for you",[],"h2",{"_key":106,"_type":64,"children":107,"markDefs":112,"style":95},"20e6749b40b1",[108],{"_key":109,"_type":68,"marks":110,"text":111},"20e6749b40b10",[],"Lint tools can be used to:",[],{"_key":114,"_type":64,"children":115,"level":138,"listItem":139,"markDefs":140,"style":95},"d8b82d0e4899",[116,120,125,129,134],{"_key":117,"_type":68,"marks":118,"text":119},"d8b82d0e48990",[],"Enforce a style, like ",{"_key":121,"_type":68,"marks":122,"text":124},"d8b82d0e48991",[123],"713696fcde71","pylint",{"_key":126,"_type":68,"marks":127,"text":128},"d8b82d0e48992",[]," for Python or ",{"_key":130,"_type":68,"marks":131,"text":133},"d8b82d0e48993",[132],"f1dcd7066d8b","PMD",{"_key":135,"_type":68,"marks":136,"text":137},"d8b82d0e48994",[]," for Java",1,"bullet",[141,143],{"_key":123,"_type":91,"href":142,"reference":12},"https:\u002F\u002Fdev.to\u002Fj0nimost\u002Fsetting-up-pep8-and-pylint-on-vs-code-34h",{"_key":132,"_type":91,"href":144,"reference":12},"https:\u002F\u002Fpmd.github.io\u002F",{"_key":146,"_type":64,"children":147,"level":138,"listItem":139,"markDefs":152,"style":95},"ab35b026289e",[148],{"_key":149,"_type":68,"marks":150,"text":151},"ab35b026289e0",[],"Prevent indexing beyond the end of an array",[],{"_key":154,"_type":64,"children":155,"level":138,"listItem":139,"markDefs":160,"style":95},"711de6288727",[156],{"_key":157,"_type":68,"marks":158,"text":159},"711de62887270",[],"Catch mismatches in variable types",[],{"_key":162,"_type":64,"children":163,"level":138,"listItem":139,"markDefs":168,"style":95},"4d13913ff514",[164],{"_key":165,"_type":68,"marks":166,"text":167},"4d13913ff5140",[],"Spot potentially dangerous data type combinations",[],{"_key":170,"_type":64,"children":171,"level":138,"listItem":139,"markDefs":176,"style":95},"0072b8bc1c89",[172],{"_key":173,"_type":68,"marks":174,"text":175},"0072b8bc1c890",[],"Detect unused variables and unreachable code",[],{"_key":178,"_type":64,"children":179,"level":138,"listItem":139,"markDefs":184,"style":95},"b600feb5d34c",[180],{"_key":181,"_type":68,"marks":182,"text":183},"b600feb5d34c0",[],"Identify dereferencing null pointers",[],{"_key":186,"_type":64,"children":187,"level":138,"listItem":139,"markDefs":192,"style":95},"9383dbd84684",[188],{"_key":189,"_type":68,"marks":190,"text":191},"9383dbd846840",[],"Flag non-portable constructs",[],{"_key":194,"_type":64,"children":195,"level":138,"listItem":139,"markDefs":200,"style":95},"50a6781cfbb9",[196],{"_key":197,"_type":68,"marks":198,"text":199},"50a6781cfbb90",[],"Monitor for code complexity",[],{"_key":202,"_type":64,"children":203,"level":138,"listItem":139,"markDefs":208,"style":95},"d39dd0ab1d4d",[204],{"_key":205,"_type":68,"marks":206,"text":207},"d39dd0ab1d4d0",[],"Detect potential bugs",[],{"_key":210,"_type":64,"children":211,"level":138,"listItem":139,"markDefs":216,"style":95},"bf18620c3976",[212],{"_key":213,"_type":68,"marks":214,"text":215},"bf18620c39760",[],"Warn about security issues",[],{"_key":218,"_type":64,"children":219,"level":138,"listItem":139,"markDefs":224,"style":95},"64dd545c2534",[220],{"_key":221,"_type":68,"marks":222,"text":223},"64dd545c25340",[],"Finds possible memory leaks",[],{"_key":226,"_type":64,"children":227,"level":138,"listItem":139,"markDefs":237,"style":95},"4b4ea9d00539",[228,232],{"_key":229,"_type":68,"marks":230,"text":231},"4b4ea9d005390",[],"Even point towards signs of ",{"_key":233,"_type":68,"marks":234,"text":236},"4b4ea9d005391",[235],"17f0ecf6384e","code smells",[238],{"_key":235,"_type":91,"href":239,"reference":12},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCode_smell",{"_key":241,"_type":64,"children":242,"markDefs":248,"style":249},"75c3590b8d07",[243],{"_key":244,"_type":68,"marks":245,"text":247},"75c3590b8d070",[246],"strong","Linters vs formatters",[],"h3",{"_key":251,"_type":64,"children":252,"markDefs":293,"style":95},"5543be6dcd64",[253,257,262,266,271,275,280,284,289],{"_key":254,"_type":68,"marks":255,"text":256},"5543be6dcd640",[],"Note that it is a somewhat blurred line between formatters and linters, especially since formatters are getting more opinionated for a lot of languages recently. Go ships a built-in one (",{"_key":258,"_type":68,"marks":259,"text":261},"5543be6dcd641",[260],"f604984a37ed","gofmt",{"_key":263,"_type":68,"marks":264,"text":265},"5543be6dcd642",[],"), Rust develops an official formatter (",{"_key":267,"_type":68,"marks":268,"text":270},"5543be6dcd643",[269],"2d5863140e0e","rustfmt",{"_key":272,"_type":68,"marks":273,"text":274},"5543be6dcd644",[],", invoked via `cargo fmt`), Python's ",{"_key":276,"_type":68,"marks":277,"text":279},"5543be6dcd645",[278],"9bf300cc6324","Black",{"_key":281,"_type":68,"marks":282,"text":283},"5543be6dcd646",[]," is incredibly popular and so is ",{"_key":285,"_type":68,"marks":286,"text":288},"5543be6dcd647",[287],"db9498bdf52d","Prettier",{"_key":290,"_type":68,"marks":291,"text":292},"5543be6dcd648",[]," for JavaScript.",[294,296,298,300],{"_key":260,"_type":91,"href":295,"reference":12},"https:\u002F\u002Fgolang.org\u002Fcmd\u002Fgofmt\u002F",{"_key":269,"_type":91,"href":297,"reference":12},"https:\u002F\u002Fgithub.com\u002Frust-lang\u002Frustfmt",{"_key":278,"_type":91,"href":299,"reference":12},"https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack",{"_key":287,"_type":91,"href":301,"reference":12},"https:\u002F\u002Fgithub.com\u002Fprettier\u002Fprettier",{"_key":303,"_type":64,"children":304,"markDefs":309,"style":95},"3f0e1672c320",[305],{"_key":306,"_type":68,"marks":307,"text":308},"3f0e1672c3200",[],"While linters can check formatting and adherence to code style and warn you if you're off, formatters go straight ahead and just apply a preferred formatting and code style completely automatically. Most of the time, the decision to create a more coherent code style on a team will include the introduction of both linters and formatters.",[],{"_key":311,"_type":64,"children":312,"markDefs":317,"style":249},"2498787cf985",[313],{"_key":314,"_type":68,"marks":315,"text":316},"2498787cf9850",[246],"Not for compiled languages?",[],{"_key":319,"_type":64,"children":320,"markDefs":325,"style":95},"6f058426d46c",[321],{"_key":322,"_type":68,"marks":323,"text":324},"6f058426d46c0",[],"Yes and no. There seems to be a tendency to reach for lint tools more when you want to check for issues that would otherwise slip through and break things later on dynamic languages, think Ruby, JavaScript, or Python. If you are working in an ecosystem where you can rely on the compiler to catch type issues and other problems, the need is less immediate. There can be benefits for the individual or team nevertheless. If you make use of all above mentioned checks to your advantage, you can:",[],{"_key":327,"_type":64,"children":328,"level":138,"listItem":139,"markDefs":333,"style":95},"3b9774e16969",[329],{"_key":330,"_type":68,"marks":331,"text":332},"3b9774e169690",[],"Fix many problems before committing code and wasting time compiling",[],{"_key":335,"_type":64,"children":336,"level":138,"listItem":139,"markDefs":341,"style":95},"7b02387f64f1",[337],{"_key":338,"_type":68,"marks":339,"text":340},"7b02387f64f10",[],"Eliminate bugs before they make it to prod",[],{"_key":343,"_type":64,"children":344,"level":138,"listItem":139,"markDefs":349,"style":95},"11cd45fbd233",[345],{"_key":346,"_type":68,"marks":347,"text":348},"11cd45fbd2330",[],"Accelerate the time to market of new features",[],{"_key":351,"_type":64,"children":352,"level":138,"listItem":139,"markDefs":357,"style":95},"b00b8e72c707",[353],{"_key":354,"_type":68,"marks":355,"text":356},"b00b8e72c7070",[],"And most of all make developers’ lives easier, with a smoother process",[],{"_key":359,"_type":64,"children":360,"markDefs":365,"style":95},"6e0dfcacf49e",[361],{"_key":362,"_type":68,"marks":363,"text":364},"6e0dfcacf49e0",[],"So why isn’t everyone a fan of linters? It’s fair to assume that it is less about developers turning their blind eye to the benefits of linting tools, but rather there are specific circumstances where the benefits are overshadowed by some down side.",[],{"_key":367,"_type":64,"children":368,"markDefs":373,"style":104},"6da4ac5fdd54",[369],{"_key":370,"_type":68,"marks":371,"text":372},"6da4ac5fdd540",[],"What are the cons?",[],{"_key":375,"_type":64,"children":376,"level":138,"listItem":139,"markDefs":389,"style":95},"7ee2210db821",[377,381,385],{"_key":378,"_type":68,"marks":379,"text":380},"7ee2210db8210",[],"The most obvious argument against it is about it ",{"_key":382,"_type":68,"marks":383,"text":384},"7ee2210db8211",[246],"breaking concentration. ",{"_key":386,"_type":68,"marks":387,"text":388},"7ee2210db8212",[],"If you are trying to get into the flow and crank out lines of code, a bunch of flags and warnings popping up can take you out of it.",[],{"_key":391,"_type":64,"children":392,"level":138,"listItem":139,"markDefs":414,"style":95},"758b69e5637d",[393,397,401,405,410],{"_key":394,"_type":68,"marks":395,"text":396},"758b69e5637d0",[],"Another danger is developing",{"_key":398,"_type":68,"marks":399,"text":400},"758b69e5637d1",[246]," warning fatigue.",{"_key":402,"_type":68,"marks":403,"text":404},"758b69e5637d2",[]," This is often the result of ",{"_key":406,"_type":68,"marks":407,"text":409},"758b69e5637d3",[408],"8a9c851f69e3","false negatives",{"_key":411,"_type":68,"marks":412,"text":413},"758b69e5637d4",[]," and making assumptions about the reliability of linters. If you get into the habit of ignoring all the flags, your linter can protect you as little as the warm, fuzzy-feeling you get inside from gazing at the ever-present check engine light.",[415],{"_key":408,"_type":91,"href":416,"reference":12},"https:\u002F\u002Fwww.perforce.com\u002Fblog\u002Fqac\u002Fwhat-are-false-positives-and-false-negatives",{"_key":418,"_type":64,"children":419,"level":138,"listItem":139,"markDefs":441,"style":95},"d53e2ea92990",[420,424,428,432,437],{"_key":421,"_type":68,"marks":422,"text":423},"d53e2ea929900",[],"Using a linter on a massive existing",{"_key":425,"_type":68,"marks":426,"text":427},"d53e2ea929901",[246]," code base",{"_key":429,"_type":68,"marks":430,"text":431},"d53e2ea929902",[]," is something many would ",{"_key":433,"_type":68,"marks":434,"text":436},"d53e2ea929903",[435],"1359ae242b20","advise against",{"_key":438,"_type":68,"marks":439,"text":440},"d53e2ea929904",[]," as “implementing a linter on a mature project becomes a tremendous task.”",[442],{"_key":435,"_type":91,"href":443,"reference":12},"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Freactjs\u002Fcomments\u002F93kuc2\u002Fhow_come_a_lot_of_developers_dont_use_code_linters\u002Fe3edqdm\u002F",{"_key":445,"_type":64,"children":446,"level":138,"listItem":139,"markDefs":460,"style":95},"88c9b15d9795",[447,451,456],{"_key":448,"_type":68,"marks":449,"text":450},"88c9b15d97950",[],"In the same way, early ",{"_key":452,"_type":68,"marks":453,"text":455},"88c9b15d97951",[454,246],"d426ab13d6e9","prototyping",{"_key":457,"_type":68,"marks":458,"text":459},"88c9b15d97952",[]," might not be the right time for clean-up.",[461],{"_key":454,"_type":91,"href":462,"reference":12},"https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=20893033",{"_key":464,"_type":64,"children":465,"markDefs":479,"style":95},"6a07f1caac59",[466,470,475],{"_key":467,"_type":68,"marks":468,"text":469},"6a07f1caac590",[],"In some situations, it might just not be worth the hassle. If you are relying on a ",{"_key":471,"_type":68,"marks":472,"text":474},"6a07f1caac591",[473],"ab5cec2ea66b","compiler",{"_key":476,"_type":68,"marks":477,"text":478},"6a07f1caac592",[]," to catch potential problems, that is a stronger assurance that code will run correctly. But if you are working in an interpreted language and cannot rely on that ultimate last check, linting tools can be a way to close the gap for your correctness needs.",[480],{"_key":473,"_type":91,"href":481,"reference":12},"https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=19199843",{"_key":483,"_type":64,"children":484,"markDefs":498,"style":95},"563037c1b77c",[485,489,494],{"_key":486,"_type":68,"marks":487,"text":488},"563037c1b77c0",[],"The myth that “real programmers don’t need linters, they block creativity” seems ",{"_key":490,"_type":68,"marks":491,"text":493},"563037c1b77c1",[492],"9915fc837100","prevalent",{"_key":495,"_type":68,"marks":496,"text":497},"563037c1b77c2",[],", but harmful. With linters evolving, there are good reasons to think about them in a new way. Here is how to be less annoyed with them.",[499],{"_key":492,"_type":91,"href":500,"reference":12},"https:\u002F\u002Fmedium.com\u002Fthe-making-of-whereby\u002Fhow-to-kill-software-quality-in-5-steps-be5718acab90",{"_key":502,"_type":64,"children":503,"markDefs":508,"style":104},"ae35f81e6c30",[504],{"_key":505,"_type":68,"marks":506,"text":507},"ae35f81e6c300",[],"How to change your (team’s) mind about linters:",[],{"_key":510,"_type":64,"children":511,"markDefs":516,"style":95},"7b64c1b3423e",[512],{"_key":513,"_type":68,"marks":514,"text":515},"7b64c1b3423e0",[],"If you feel you suffer from linter frustration or have trouble convincing members of your team of the benefits of making use of them, here are some ways to think about it more than just as annoying error messages:",[],{"_key":518,"_type":64,"children":519,"markDefs":524,"style":249},"d1351127cf37",[520],{"_key":521,"_type":68,"marks":522,"text":523},"d1351127cf370",[246],"How to embrace linters as a team",[],{"_key":526,"_type":64,"children":527,"markDefs":554,"style":95},"258f333602ec",[528,532,536,541,545,550],{"_key":529,"_type":68,"marks":530,"text":531},"258f333602ec0",[246],"Let the linter build the bikesheds",{"_key":533,"_type":68,"marks":534,"text":535},"258f333602ec1",[],". ",{"_key":537,"_type":68,"marks":538,"text":540},"258f333602ec2",[539],"da2fdb3aa9a6","Bikeshedding",{"_key":542,"_type":68,"marks":543,"text":544},"258f333602ec3",[],", is when people fall into the trap of discussing something small and trivial around a more complicated project. Tabs? Spaces? Double quotes? Single quotes? Let the linter hoover up all these little style questions before they take up time during pull request (PR) reviews with peers. Get rid of the ",{"_key":546,"_type":68,"marks":547,"text":549},"258f333602ec4",[548],"9e5c0eb9ece3","style",{"_key":551,"_type":68,"marks":552,"text":553},"258f333602ec5",[]," questions that are truly not worth arguing about.",[555,557],{"_key":539,"_type":91,"href":556,"reference":12},"https:\u002F\u002Fen.wiktionary.org\u002Fwiki\u002Fbikeshedding",{"_key":548,"_type":91,"href":558,"reference":12},"https:\u002F\u002Fworkplace.stackexchange.com\u002Fquestions\u002F160542\u002Fhow-can-i-get-a-new-developer-to-significantly-improve-their-code",{"_key":560,"_type":64,"children":561,"markDefs":566,"style":95},"642ee192d82e",[562],{"_key":563,"_type":68,"marks":564,"text":565},"642ee192d82e0",[],"The introduction of linters might not only free up time during code review for more important decision making and learning, it might even reduce the number of requests in total. Lint out those that were about style bickery. Standardizing your code is a great way to move the conversation to a more productive level.",[],{"_key":568,"_type":64,"children":569,"markDefs":579,"style":95},"904b77e7ccbe",[570,575],{"_key":571,"_type":68,"marks":572,"text":574},"904b77e7ccbe0",[573],"05fa9e255b67","Welch Canavan",{"_key":576,"_type":68,"marks":577,"text":578},"904b77e7ccbe1",[]," puts it nicely on his blog: “You will never be on a team that is completely aligned on best practices. Part of being a great team member is setting your ego aside and recognizing that it is much more important to agree on a standard than your standard.”",[580],{"_key":573,"_type":91,"href":581,"reference":12},"https:\u002F\u002Fwelchcanavan.com\u002Fwhy-i-lint-everything",{"_key":583,"_type":64,"children":584,"markDefs":620,"style":95},"8474d538a0be",[585,589,593,598,602,607,611,616],{"_key":586,"_type":68,"marks":587,"text":588},"8474d538a0be0",[246],"Let the linter create a unified voice. ",{"_key":590,"_type":68,"marks":591,"text":592},"8474d538a0be1",[],"The reality is that code has many (sometimes many, many, many) authors. But the fact that many people have contributed should not be visible in the code. ",{"_key":594,"_type":68,"marks":595,"text":597},"8474d538a0be2",[596],"5dd04288aaf1","In his talk",{"_key":599,"_type":68,"marks":600,"text":601},"8474d538a0be3",[],", Matt Rose describes this as the narrative voice of the writing. You can have oral or written agreements on style conventions to keep this voice consistent but they ",{"_key":603,"_type":68,"marks":604,"text":606},"8474d538a0be4",[605],"06322780f879","will never work as well as automatic convention.",{"_key":608,"_type":68,"marks":609,"text":610},"8474d538a0be5",[],"Your team of many code authors can write with one indistinguishable voice – just ",{"_key":612,"_type":68,"marks":613,"text":615},"8474d538a0be6",[614],"61dd32d2465f","like Shakespeare",{"_key":617,"_type":68,"marks":618,"text":619},"8474d538a0be7",[],".",[621,623,625],{"_key":596,"_type":91,"href":622,"reference":12},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=BLJXG5LPEsA",{"_key":605,"_type":91,"href":624,"reference":12},"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Freactjs\u002Fcomments\u002F93kuc2\u002Fhow_come_a_lot_of_developers_dont_use_code_linters\u002Fe3eewtv\u002F",{"_key":614,"_type":91,"href":626,"reference":12},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FShakespeare_authorship_question",{"_key":628,"_type":64,"children":629,"markDefs":647,"style":95},"cb610b8e54c4",[630,634,638,643],{"_key":631,"_type":68,"marks":632,"text":633},"cb610b8e54c40",[246],"Let the linter help keep your code healthy. ",{"_key":635,"_type":68,"marks":636,"text":637},"cb610b8e54c41",[],"Code smells, style guide mismatches, security issues or poorly designed code—many modern linters will help you look after your ",{"_key":639,"_type":68,"marks":640,"text":642},"cb610b8e54c42",[641],"f73d0ec033b3","code base’s health",{"_key":644,"_type":68,"marks":645,"text":646},"cb610b8e54c43",[],". You can see linters as a check-up, a way to measure your code’s health to then discuss in retrospective or architecture meetings.",[648],{"_key":641,"_type":91,"href":649,"reference":12},"https:\u002F\u002Fsourcelevel.io\u002Fblog\u002Fwhat-is-a-linter-and-why-your-team-should-use-it",{"_key":651,"_type":64,"children":652,"markDefs":678,"style":95},"42ddd4a4ff29",[653,657,661,666,670,675],{"_key":654,"_type":68,"marks":655,"text":656},"42ddd4a4ff290",[246],"Let the linter help you automate. ",{"_key":658,"_type":68,"marks":659,"text":660},"42ddd4a4ff291",[],"Make your life easier and invest the time to automate what can be automated. Most linters are command-line tools first and foremost and thus are excellently suited for automation. Examples are Prettier, Pylint, ",{"_key":662,"_type":68,"marks":663,"text":665},"42ddd4a4ff292",[664],"c5efafd722ee","ESLint",{"_key":667,"_type":68,"marks":668,"text":669},"42ddd4a4ff293",[]," or ",{"_key":671,"_type":68,"marks":672,"text":674},"42ddd4a4ff294",[673],"828f52bfbe34","RuboCop",{"_key":676,"_type":68,"marks":677,"text":619},"42ddd4a4ff295",[],[679,681],{"_key":664,"_type":91,"href":680,"reference":12},"https:\u002F\u002Feslint.org\u002F",{"_key":673,"_type":91,"href":682,"reference":12},"https:\u002F\u002Frubocop.org\u002F",{"_key":684,"_type":64,"children":685,"markDefs":690,"style":249},"816b1c364833",[686],{"_key":687,"_type":68,"marks":688,"text":689},"816b1c3648330",[246],"How to embrace linters as a team as individuals (on a team)",[],{"_key":692,"_type":64,"children":693,"markDefs":711,"style":95},"0af3c855cc31",[694,698,702,707],{"_key":695,"_type":68,"marks":696,"text":697},"0af3c855cc310",[246],"Embrace the learning opportunities. ",{"_key":699,"_type":68,"marks":700,"text":701},"0af3c855cc311",[],"It might be tough to change your mindset from seeing each pop-up not as on obstruction, but, as Matt Eland ",{"_key":703,"_type":68,"marks":704,"text":706},"0af3c855cc312",[705],"4de011f1e86b","writes",{"_key":708,"_type":68,"marks":709,"text":710},"0af3c855cc313",[],", “Sometimes, just searching and understanding a warning will teach you new things about programming and shore up vulnerabilities you didn’t even know you had.”",[712],{"_key":705,"_type":91,"href":713,"reference":12},"https:\u002F\u002Fmedium.com\u002Fbetter-programming\u002Fwarnings-are-not-pieces-of-flair-2acc8f894eb7",{"_key":715,"_type":64,"children":716,"markDefs":734,"style":95},"fc2811c405ad",[717,721,725,730],{"_key":718,"_type":68,"marks":719,"text":720},"fc2811c405ad0",[246],"Gamify it. ",{"_key":722,"_type":68,"marks":723,"text":724},"fc2811c405ad1",[],"If it already feels to you like “you vs. the linter” why not take that to the max. ",{"_key":726,"_type":68,"marks":727,"text":729},"fc2811c405ad2",[728],"f41cc2c46116","Block out 15-minute of time.",{"_key":731,"_type":68,"marks":732,"text":733},"fc2811c405ad3",[]," And then, much like getting an inbox to zero, see how many warnings you can tackle during this period.",[735],{"_key":728,"_type":91,"href":713,"reference":12},{"_key":737,"_type":64,"children":738,"markDefs":752,"style":95},"e921eece59d1",[739,743,747],{"_key":740,"_type":68,"marks":741,"text":742},"e921eece59d10",[246],"Code drunk, linter sober. ",{"_key":744,"_type":68,"marks":745,"text":746},"e921eece59d11",[],"Linked to the above, it is all about limiting linters (and potential frustrations with it) to a specific time. If you are in the flow, cranking out that prototype, turn it off. But allow time to address some of the flags before you waste that time with a peer in a review. ",{"_key":748,"_type":68,"marks":749,"text":751},"e921eece59d12",[750],"em","And of course, we are by no means encouraging having a drink at work. Stay hydrated tho!",[],{"_key":754,"_type":64,"children":755,"markDefs":776,"style":95},"d5f632e62a89",[756,760,764,769,772],{"_key":757,"_type":68,"marks":758,"text":759},"d5f632e62a890",[246],"Think of linters as a pedantic friend. ",{"_key":761,"_type":68,"marks":762,"text":763},"d5f632e62a891",[],"We enjoyed the suggestion of treating a linter as ",{"_key":765,"_type":68,"marks":766,"text":768},"d5f632e62a892",[767],"0555a4d6ee9d","a weirdly pedantic code review friend",{"_key":770,"_type":68,"marks":771,"text":535},"d5f632e62a893",[750],{"_key":773,"_type":68,"marks":774,"text":775},"d5f632e62a894",[],"Assume that they know more than you. But since they are your friend, you can also tell them to go away when you’re trying to focus. Just make sure to ask them to come back later to check your code and make you look smart in front of your peers. Note: they are a loyal friend, but take their pedantry with a grain of salt and add your human judgment.",[777],{"_key":767,"_type":91,"href":778,"reference":12},"https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=14921255",{"_key":780,"_type":64,"children":781,"markDefs":786,"style":104},"393bb5fb18f7",[782],{"_key":783,"_type":68,"marks":784,"text":785},"393bb5fb18f70",[],"Remember: Linting isn't just for you. It is for the other people on the team.",[],{"_key":788,"_type":64,"children":789,"markDefs":820,"style":95},"6ea731360457",[790,794,799,803,808,812,816],{"_key":791,"_type":68,"marks":792,"text":793},"6ea7313604570",[],"Linting can help with the ",{"_key":795,"_type":68,"marks":796,"text":798},"6ea7313604571",[797],"c8de2bca2f76","heterogeneous knowledge ",{"_key":800,"_type":68,"marks":801,"text":802},"6ea7313604572",[],"on a team. For juniors, a linter is like an invisible senior team member that points out style guideline documentation, causes them to pause and question steps, and ultimately helps",{"_key":804,"_type":68,"marks":805,"text":807},"6ea7313604573",[806],"60af28d1c060"," learn a new language.",{"_key":809,"_type":68,"marks":810,"text":811},"6ea7313604574",[]," For seniors, it is an easy way to enforce, not their style, but the use of ",{"_key":813,"_type":68,"marks":814,"text":815},"6ea7313604575",[750],"a",{"_key":817,"_type":68,"marks":818,"text":819},"6ea7313604576",[]," consistent style on a team. Leading by example becomes more visible and somewhat built in. It saves many shoulder taps and time during code reviews.",[821,822],{"_key":797,"_type":91,"href":649,"reference":12},{"_key":806,"_type":91,"href":823,"reference":12},"https:\u002F\u002Fspin.atomicobject.com\u002F2018\u002F09\u002F20\u002Flearn-by-linting\u002F",{"_key":825,"_type":64,"children":826,"markDefs":858,"style":95},"42f3a13cc3ee",[827,831,836,840,845,849,854],{"_key":828,"_type":68,"marks":829,"text":830},"42f3a13cc3ee0",[],"The process of linting can be time consuming when starting out a project; it requires the discipline to catch linter messages ",{"_key":832,"_type":68,"marks":833,"text":835},"42f3a13cc3ee1",[834],"2e837e75d758","from your first line of code.",{"_key":837,"_type":68,"marks":838,"text":839},"42f3a13cc3ee2",[]," It is, however, worth taking advantage of the ways to customize. Make use of best practices. Some companies publish their configuration settings. Like ",{"_key":841,"_type":68,"marks":842,"text":844},"42f3a13cc3ee3",[843],"7073b55ce658","Airbnb's .eslintrc",{"_key":846,"_type":68,"marks":847,"text":848},"42f3a13cc3ee4",[],". Github not only published their linter config, but even open-sourced their ",{"_key":850,"_type":68,"marks":851,"text":853},"42f3a13cc3ee5",[852],"064edbbdf9e4","unified version",{"_key":855,"_type":68,"marks":856,"text":857},"42f3a13cc3ee6",[]," of over 20 linters last month.",[859,860,862],{"_key":834,"_type":91,"href":581,"reference":12},{"_key":843,"_type":91,"href":861,"reference":12},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Feslint-config-airbnb",{"_key":852,"_type":91,"href":863,"reference":12},"https:\u002F\u002Fwww.zdnet.com\u002Farticle\u002Fmicrosofts-github-now-open-source-developers-get-one-linter-to-rule-them-all\u002F",{"_key":865,"_type":64,"children":866,"markDefs":880,"style":95},"57d0d7f9f550",[867,871,876],{"_key":868,"_type":68,"marks":869,"text":870},"57d0d7f9f5500",[],"Our parting thoughts are summed up nicely in this ",{"_key":872,"_type":68,"marks":873,"text":875},"57d0d7f9f5501",[874],"053b1c112a47","contribution",{"_key":877,"_type":68,"marks":878,"text":879},"57d0d7f9f5502",[]," “Something I think that programmers don't always appreciate is that linting isn't an either\u002For proposition necessarily. A linter is exactly like the spelling\u002Fgrammar checker in your word processor. It's there to advise you.”",[881],{"_key":874,"_type":91,"href":778,"reference":12},true,"2020\u002F07\u002F20","Traditionally, linters make sure your code is clean and easy for teammates to read. They check for errors, bugs, style, and more. While they are more prevalent in dynamic\u002Finterpreted languages, they are not limited to them. Getting code as tidy as possible is the goal, but linters can also take some time getting used to, be a distraction, and might even be impossible to introduce to old, large code bases. We look at why they might still be worth your time. ",{"_type":53,"asset":886},{"_ref":887,"_type":56},"image-5dda5fcab35cc73360ff6dc84e15946bc2ee803b-1200x630-png",{"code":889,"language":890},"\u003C!-- wp:paragraph -->\n\u003Cp>Linters are continually evolving. At the core, \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLint_(software)\">Wikipedia\u003C\u002Fa> defines them as tools to analyze “source code to flag programming errors, bugs, stylistic errors, and suspicious constructs.” Linting can be seen as a static analysis that \u003Ca href=\"http:\u002F\u002Fjamie-wong.com\u002Fpost\u002Fbending-the-pl-curve\u002F\">happens outside of a compiler\u003C\u002Fa>; that is, they process and examine source code without compiling it into a binary.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>What linters can do for you&nbsp;\u003C\u002Fh2>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Lint tools can be used to:\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:list -->\n\u003Cul>\u003Cli>Enforce a style, like \u003Ca href=\"https:\u002F\u002Fdev.to\u002Fj0nimost\u002Fsetting-up-pep8-and-pylint-on-vs-code-34h\">pylint\u003C\u002Fa> for Python or \u003Ca href=\"https:\u002F\u002Fpmd.github.io\u002F\">PMD\u003C\u002Fa> for Java\u003C\u002Fli>\u003Cli>Prevent indexing beyond the end of an array\u003C\u002Fli>\u003Cli>Catch mismatches in variable types&nbsp;\u003C\u002Fli>\u003Cli>Spot potentially dangerous data type combinations\u003C\u002Fli>\u003Cli>Detect unused variables and unreachable code\u003C\u002Fli>\u003Cli>Identify dereferencing null pointers\u003C\u002Fli>\u003Cli>Flag non-portable constructs\u003C\u002Fli>\u003Cli>Monitor for code complexity&nbsp;\u003C\u002Fli>\u003Cli>Detect potential bugs\u003C\u002Fli>\u003Cli>Warn about security issues\u003C\u002Fli>\u003Cli>Finds possible memory leaks\u003C\u002Fli>\u003Cli>Even point towards signs of \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCode_smell\">code smells\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\n\u003C!-- \u002Fwp:list -->\n\n\u003C!-- wp:heading {\"level\":3} -->\n\u003Ch3>\u003Cstrong>Linters vs formatters\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Note that it is a somewhat blurred line between formatters and linters, especially since formatters are getting more opinionated for a lot of languages recently. Go ships a built-in one (\u003Ca href=\"https:\u002F\u002Fgolang.org\u002Fcmd\u002Fgofmt\u002F\">gofmt\u003C\u002Fa>), Rust develops an official formatter (\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frust-lang\u002Frustfmt\">rustfmt\u003C\u002Fa>, invoked via `cargo fmt`), Python's \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack\">Black\u003C\u002Fa> is incredibly popular and so is \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fprettier\u002Fprettier\">Prettier\u003C\u002Fa> for JavaScript.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>While linters can check formatting and adherence to code style and warn you if you're off, formatters go straight ahead and just apply a preferred formatting and code style completely automatically. Most of the time, the decision to create a more coherent code style on a team will include the introduction of both linters and formatters.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:heading {\"level\":3} -->\n\u003Ch3>\u003Cstrong>Not for compiled languages?\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Yes and no. There seems to be a tendency to reach for lint tools more when you want to check for issues that would otherwise slip through and break things later on dynamic languages, think Ruby, JavaScript, or Python. If you are working in an ecosystem where you can rely on the compiler to catch type issues and other problems, the need is less immediate. There can be benefits for the individual or team nevertheless. If you make use of all above mentioned checks to your advantage, you can:\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:list -->\n\u003Cul>\u003Cli>Fix many problems before committing code and wasting time compiling\u003C\u002Fli>\u003C\u002Ful>\n\u003C!-- \u002Fwp:list -->\n\n\u003C!-- wp:list -->\n\u003Cul>\u003Cli>Eliminate bugs before they make it to prod\u003C\u002Fli>\u003Cli>Accelerate the time to market of new features\u003C\u002Fli>\u003Cli>And most of all make developers’ lives easier, with a smoother process&nbsp;\u003C\u002Fli>\u003C\u002Ful>\n\u003C!-- \u002Fwp:list -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>So why isn’t everyone a fan of linters? It’s fair to assume that it is less about developers turning their blind eye to the benefits of linting tools, but rather there are specific circumstances where the benefits are overshadowed by some down side.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>What are the cons?\u003C\u002Fh2>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:list -->\n\u003Cul>\u003Cli>The most obvious argument against it is about it \u003Cstrong>breaking concentration. \u003C\u002Fstrong>If you are trying to get into the flow and crank out lines of code, a bunch of flags and warnings popping up can take you out of it.&nbsp;\u003C\u002Fli>\u003Cli>Another danger is developing\u003Cstrong> warning fatigue.\u003C\u002Fstrong> This is often the result of \u003Ca href=\"https:\u002F\u002Fwww.perforce.com\u002Fblog\u002Fqac\u002Fwhat-are-false-positives-and-false-negatives\">false negatives\u003C\u002Fa> and making assumptions about the reliability of linters. If you get into the habit of ignoring all the flags, your linter can protect you as little as the warm, fuzzy-feeling you get inside from gazing at the ever-present check engine light.\u003C\u002Fli>\u003Cli>Using a linter on a massive existing\u003Cstrong> code base\u003C\u002Fstrong> is something many would \u003Ca href=\"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Freactjs\u002Fcomments\u002F93kuc2\u002Fhow_come_a_lot_of_developers_dont_use_code_linters\u002Fe3edqdm\u002F\">advise against\u003C\u002Fa> as “implementing a linter on a mature project becomes a tremendous task.”&nbsp;\u003C\u002Fli>\u003Cli>In the same way, early \u003Ca href=\"https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=20893033\">\u003Cstrong>prototyping\u003C\u002Fstrong>\u003C\u002Fa> might not be the right time for clean-up.\u003C\u002Fli>\u003C\u002Ful>\n\u003C!-- \u002Fwp:list -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>In some situations, it might just not be worth the hassle. If you are relying on a \u003Ca href=\"https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=19199843\">compiler\u003C\u002Fa> to catch potential problems, that is a stronger assurance that code will run correctly. But if you are working in an interpreted language and cannot rely on that ultimate last check, linting tools can be a way to close the gap for your correctness needs.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>The myth that “real programmers don’t need linters, they block creativity” seems \u003Ca href=\"https:\u002F\u002Fmedium.com\u002Fthe-making-of-whereby\u002Fhow-to-kill-software-quality-in-5-steps-be5718acab90\">prevalent\u003C\u002Fa>, but harmful. With linters evolving, there are good reasons to think about them in a new way. Here is how to be less annoyed with them.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>How to change your (team’s) mind about linters:\u003C\u002Fh2>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>If you feel you suffer from linter frustration or have trouble convincing members of your team of the benefits of making use of them, here are some ways to think about it more than just as annoying error messages:\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:heading {\"level\":3} -->\n\u003Ch3>\u003Cstrong>How to embrace linters as a team\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cstrong>Let the linter build the bikesheds\u003C\u002Fstrong>. \u003Ca href=\"https:\u002F\u002Fen.wiktionary.org\u002Fwiki\u002Fbikeshedding\">Bikeshedding\u003C\u002Fa>, is when people fall into the trap of discussing something small and trivial around a more complicated project. Tabs? Spaces? Double quotes? Single quotes? Let the linter hoover up all these little style questions before they take up time during pull request (PR) reviews with peers. Get rid of the \u003Ca href=\"https:\u002F\u002Fworkplace.stackexchange.com\u002Fquestions\u002F160542\u002Fhow-can-i-get-a-new-developer-to-significantly-improve-their-code\">style\u003C\u002Fa> questions that are truly not worth arguing about.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>The introduction of linters might not only free up time during code review for more important decision making and learning, it might even reduce the number of requests in total. Lint out those that were about style bickery. Standardizing your code is a great way to move the conversation to a more productive level.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwelchcanavan.com\u002Fwhy-i-lint-everything\">Welch Canavan\u003C\u002Fa> puts it nicely on his blog: “You will never be on a team that is completely aligned on best practices. Part of being a great team member is setting your ego aside and recognizing that it is much more important to agree on a standard than your standard.”\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cstrong>Let the linter create a unified voice. \u003C\u002Fstrong>The reality is that code has many (sometimes many, many, many) authors. But the fact that many people have contributed should not be visible in the code. \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=BLJXG5LPEsA\">In his talk\u003C\u002Fa>, Matt Rose describes this as the narrative voice of the writing.&nbsp; You can have oral or written agreements on style conventions to keep this voice consistent but they \u003Ca href=\"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Freactjs\u002Fcomments\u002F93kuc2\u002Fhow_come_a_lot_of_developers_dont_use_code_linters\u002Fe3eewtv\u002F\">will never work as well as automatic convention.\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>Your team of many code authors can write with one indistinguishable voice – just \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FShakespeare_authorship_question\">like Shakespeare\u003C\u002Fa>.&nbsp;\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cstrong>Let the linter help keep your code healthy. \u003C\u002Fstrong>Code smells, style guide mismatches, security issues or poorly designed code—many modern linters will help you look after your \u003Ca href=\"https:\u002F\u002Fsourcelevel.io\u002Fblog\u002Fwhat-is-a-linter-and-why-your-team-should-use-it\">code base’s health\u003C\u002Fa>. You can see linters as a check-up, a way to measure your code’s health to then discuss in retrospective or architecture meetings.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cstrong>Let the linter help you automate. \u003C\u002Fstrong>Make your life easier and invest the time to automate what can be automated. Most linters are command-line tools first and foremost and thus are excellently suited for automation. Examples are Prettier, Pylint, \u003Ca href=\"https:\u002F\u002Feslint.org\u002F\">ESLint\u003C\u002Fa> or \u003Ca href=\"https:\u002F\u002Frubocop.org\u002F\">RuboCop\u003C\u002Fa>.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:heading {\"level\":3} -->\n\u003Ch3>\u003Cstrong>How to embrace linters as a team as individuals (on a team)\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cstrong>Embrace the learning opportunities. \u003C\u002Fstrong>It might be tough to change your mindset from seeing each pop-up not as on obstruction, but, as Matt Eland \u003Ca href=\"https:\u002F\u002Fmedium.com\u002Fbetter-programming\u002Fwarnings-are-not-pieces-of-flair-2acc8f894eb7\">writes\u003C\u002Fa>, “Sometimes, just searching and understanding a warning will teach you new things about programming and shore up vulnerabilities you didn’t even know you had.”\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cstrong>Gamify it. \u003C\u002Fstrong>If it already feels to you like “you vs. the linter” why not take that to the max. \u003Ca href=\"https:\u002F\u002Fmedium.com\u002Fbetter-programming\u002Fwarnings-are-not-pieces-of-flair-2acc8f894eb7\">Block out 15-minute of time.\u003C\u002Fa> And then, much like getting an inbox to zero, see how many warnings you can tackle during this period.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cstrong>Code drunk, linter sober. \u003C\u002Fstrong>Linked to the above, it is all about limiting linters (and potential frustrations with it) to a specific time. If you are in the flow, cranking out that prototype, turn it off. But allow time to address some of the flags before you waste that time with a peer in a review. \u003Cem>And of course, we are by no means encouraging having a drink at work. Stay hydrated tho!\u003C\u002Fem>\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cstrong>Think of linters as a pedantic friend. \u003C\u002Fstrong>We enjoyed the suggestion of treating a linter as \u003Ca href=\"https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=14921255\">a weirdly pedantic code review friend\u003C\u002Fa>\u003Cem>. \u003C\u002Fem>Assume that they know more than you. But since they are your friend, you can also tell them to go away when you’re trying to focus. Just make sure to ask them to come back later to check your code and make you look smart in front of your peers. Note: they are a loyal friend, but take their pedantry with a grain of salt and add your human judgment.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>Remember: Linting isn't just for you. It is for the other people on the team.&nbsp;\u003C\u002Fh2>\n\u003C!-- \u002Fwp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Linting can help with the \u003Ca href=\"https:\u002F\u002Fsourcelevel.io\u002Fblog\u002Fwhat-is-a-linter-and-why-your-team-should-use-it\">heterogeneous knowledge \u003C\u002Fa>on a team. For juniors, a linter is like an invisible senior team member that points out style guideline documentation, causes them to pause and question steps, and ultimately helps\u003Ca href=\"https:\u002F\u002Fspin.atomicobject.com\u002F2018\u002F09\u002F20\u002Flearn-by-linting\u002F\"> learn a new language.\u003C\u002Fa> For seniors, it is an easy way to enforce, not their style, but the use of \u003Cem>a\u003C\u002Fem> consistent style on a team. Leading by example becomes more visible and somewhat built in. It saves many shoulder taps and time during code reviews.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>The process of linting&nbsp; can be time consuming when starting out a project; it requires the discipline to catch linter messages \u003Ca href=\"https:\u002F\u002Fwelchcanavan.com\u002Fwhy-i-lint-everything\">from your first line of code.\u003C\u002Fa> It is, however, worth taking advantage of the ways to customize. Make use of best practices. Some companies publish their configuration settings. Like \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Feslint-config-airbnb\">Airbnb's .eslintrc\u003C\u002Fa>. Github not only published their linter config, but even open-sourced their \u003Ca href=\"https:\u002F\u002Fwww.zdnet.com\u002Farticle\u002Fmicrosofts-github-now-open-source-developers-get-one-linter-to-rule-them-all\u002F\">unified version\u003C\u002Fa> of over 20 linters last month.\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Our parting thoughts are summed up nicely in this \u003Ca href=\"https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=14921255\">contribution\u003C\u002Fa> “Something I think that programmers don't always appreciate is that linting isn't an either\u002For proposition necessarily. A linter is exactly like the spelling\u002Fgrammar checker in your word processor. It's there to advise you.”\u003C\u002Fp>\n\u003C!-- \u002Fwp:paragraph -->","html","2020-07-20T12:22:20.000Z",{"current":893},"linters-arent-in-your-way-theyre-on-your-side",[895,903,907,911],{"_createdAt":896,"_id":897,"_rev":898,"_type":899,"_updatedAt":896,"slug":900,"title":902},"2023-05-23T16:43:21Z","wp-tagcat-code-for-a-living","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":901},"code-for-a-living","Code for a Living",{"_createdAt":896,"_id":904,"_rev":898,"_type":899,"_updatedAt":896,"slug":905,"title":906},"wp-tagcat-code-analysis",{"current":906},"code-analysis",{"_createdAt":896,"_id":908,"_rev":898,"_type":899,"_updatedAt":896,"slug":909,"title":910},"wp-tagcat-debugging",{"current":910},"debugging",{"_createdAt":896,"_id":912,"_rev":898,"_type":899,"_updatedAt":896,"slug":913,"title":914},"wp-tagcat-linters",{"current":914},"linters","Linters aren't in your way. They're on your side",[917,923,929,935],{"_id":918,"publishedAt":919,"slug":920,"sponsored":12,"title":922},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":921},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":924,"publishedAt":925,"slug":926,"sponsored":12,"title":928},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":927},"your-ai-shipped-a-backend-that-boots-that-is-the-whole-problem","Your AI shipped a backend that boots. That is the whole problem.",{"_id":930,"publishedAt":931,"slug":932,"sponsored":12,"title":934},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":933},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"_id":936,"publishedAt":937,"slug":938,"sponsored":12,"title":940},"30b995f7-7cb9-4dd8-bf71-d0685940a32b","2026-06-19T14:00:00.000Z",{"_type":10,"current":939},"dispatches-from-o-reilly-from-capabilities-to-responsibilities","Dispatches from O'Reilly: From capabilities to responsibilities",{"data":942,"sourceMap":-1},{"count":943,"lastTimestamp":944},7,"2023-05-25T09:47:22Z"]