mirror of
				https://github.com/lingble/twenty.git
				synced 2025-11-03 22:27:57 +00:00 
			
		
		
		
	### Description Fix explicit boolean predicates rule not working with boolean constants ### Refs #4881 ### Demo Fixes #4881 Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com> Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Matheus <matheus_benini@hotmail.com>
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { ESLintUtils, TSESTree } from '@typescript-eslint/experimental-utils';
 | 
						|
import ts from 'typescript';
 | 
						|
 | 
						|
export const RULE_NAME = 'explicit-boolean-predicates-in-if';
 | 
						|
 | 
						|
const isBooleanType = (type: ts.Type) => {
 | 
						|
  // check if boolean flag(s) is set on the type (e.g. boolean, true, false, etc.)
 | 
						|
  return type && (type.flags & ts.TypeFlags.BooleanLike) !== 0;
 | 
						|
};
 | 
						|
 | 
						|
export const rule = ESLintUtils.RuleCreator(() => __filename)({
 | 
						|
  name: RULE_NAME,
 | 
						|
  meta: {
 | 
						|
    type: 'suggestion',
 | 
						|
    docs: {
 | 
						|
      description: 'Enforce explicit boolean predicates in if statements',
 | 
						|
      recommended: 'warn',
 | 
						|
    },
 | 
						|
    fixable: 'code',
 | 
						|
    schema: [],
 | 
						|
    messages: {
 | 
						|
      nonExplicitPredicate:
 | 
						|
        'Use an explicit boolean predicate in if statements.',
 | 
						|
    },
 | 
						|
  },
 | 
						|
  defaultOptions: [],
 | 
						|
  create: (context) => {
 | 
						|
    const parserServices = ESLintUtils.getParserServices(context);
 | 
						|
    const typeChecker = parserServices.program.getTypeChecker();
 | 
						|
 | 
						|
    return {
 | 
						|
      IfStatement: (node: TSESTree.IfStatement) => {
 | 
						|
        const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node.test);
 | 
						|
        const type = typeChecker.getTypeAtLocation(tsNode);
 | 
						|
 | 
						|
        if (!isBooleanType(type)) {
 | 
						|
          const { test } = node;
 | 
						|
          context.report({
 | 
						|
            node: test,
 | 
						|
            messageId: 'nonExplicitPredicate',
 | 
						|
          });
 | 
						|
        }
 | 
						|
      },
 | 
						|
    };
 | 
						|
  },
 | 
						|
});
 | 
						|
 | 
						|
export default rule;
 |