[HN Gopher] Interesting Bugs Caught by ESLint's no-constant-bina...
       ___________________________________________________________________
        
       Interesting Bugs Caught by ESLint's no-constant-binary-expression
        
       Author : CharlesW
       Score  : 24 points
       Date   : 2023-11-08 20:41 UTC (2 hours ago)
        
 (HTM) web link (eslint.org)
 (TXT) w3m dump (eslint.org)
        
       | cultureswitch wrote:
       | Having any such binary expression is considered a severe
       | violation of coding rules for certified software (avionics,
       | medical...). There's a good reason, because it's my almost always
       | hiding a bug. And in gray cases where the duplication is not
       | obvious, forces to think hard about it.
        
       | yjftsjthsd-h wrote:
       | > Eventually it clicked for me: developers don't intend to write
       | useless code, and code that does not match the developer's intent
       | is by definition a bug. Therefore, any useless code you can
       | detect is a bug.
       | 
       | I'm not completely sure I would take it all the way to calling it
       | a bug, but I do appreciate a rigorous way to simplify code,
       | because the worst case is that you've made it easier to reason
       | about and that's a win all by itself.
       | 
       | (EDIT: This post also makes me feel better about my personal
       | coding style being paranoid and doing things like using parens to
       | force order of operations and avoiding "advanced" constructs like
       | ?? because I don't trust myself to not shoot myself in the foot.
       | I'm not a professional dev, so I'm happy to write verbose,
       | inelegant code in exchange for it being so simple that I'm less
       | likely to screw it up)
        
       | darraghmckay wrote:
       | This was really interesting, particularly seeing how a lot of
       | these are probably mistakes stemming from familiarity with syntax
       | of other languages
        
       | fiddlerwoaroof wrote:
       | One thing that reading _The Little Prover_ did for me was correct
       | a sort of lazy preconception I had that you cannot "reason about"
       | code in dynamically typed languages. And it sort of crystallized
       | my experience of large dynamically typed codebases not being as
       | bad as one might expect. The patterns in OP are one case here
       | where the boolean expressions are trivially analyzable and there
       | are other classes of such analysis: e.g. it's possible to use the
       | condition of an id statement to detect useless expressions in
       | both the then and else clauses.
        
       | lalaithion wrote:
       | Ideally this lint would ignore if (false) and if (true), even
       | though these are still constant binary expressions, they aren't
       | vectors for similar bugs like the constant expressions in the
       | blog post.
       | 
       | Although "real" production software would use feature flags of
       | some kind instead of hardcoding the constant, sometimes you do
       | just need to hide some code behind an if statement that is
       | currently ineffectual, and linters that prevent that are
       | extremely annoying and force me to write a confusing, convoluted
       | expression that is too complicated for the linter to detect as
       | constant true or constant false.
        
       | twisteriffic wrote:
       | > Thinking || allows for set operations: states.includes('VALID'
       | || 'IN_PROGRESS')
       | 
       | Genuinely wondering what language that would have been valid in.
        
       ___________________________________________________________________
       (page generated 2023-11-08 23:00 UTC)