Coverage for metrics/halstead/typescript.py: 100%

1"""Halstead complexity measures for TypeScript."""

2

3 from __future__ import annotations

4

5 from metrics.halstead.common import make_compute_halstead

6

7 _TS_OPERATOR_TOKENS = {

8 # Arithmetic

9 "+",

10 "-",

11 "*",

12 "/",

13 "%",

14 "**",

15 # Comparison / equality

16 "==",

17 "!=",

18 "===",

19 "!==",

20 "<",

21 ">",

22 "<=",

23 ">=",

24 # Bitwise

25 "&",

26 "|",

27 "^",

28 "~",

29 "<<",

30 ">>",

31 ">>>",

32 # Logical (leaf tokens)

33 "&&",

34 "||",

35 "!",

36 # Assignment

37 "=",

38 "+=",

39 "-=",

40 "*=",

41 "/=",

42 "%=",

43 "**=",

44 "&=",

45 "|=",

46 "^=",

47 "<<=",

48 ">>=",

49 ">>>=",

50 "&&=",

51 "||=",

52 "??=",

53 # Other symbols

54 ".",

55 ",",

56 ":",

57 ";",

58 "(",

59 ")",

60 "[",

61 "]",

62 "{",

63 "}",

64 "=>",

65 "?.",

66 "??",

67 # Unary / misc

68 "++",

69 "--",

70 "typeof",

71 "instanceof",

72 "in",

73 "void",

74 "delete",

75 "...",

76}

77

78 _TS_KEYWORD_OPERATORS = {

79 "if_statement",

80 "else_clause",

81 "for_statement",

82 "for_in_statement",

83 "while_statement",

84 "do_statement",

85 "return_statement",

86 "throw_statement",

87 "function_declaration",

88 "generator_function_declaration",

89 "class_declaration",

90 "abstract_class_declaration",

91 "method_definition",

92 "arrow_function",

93 "import_statement",

94 "export_statement",

95 "try_statement",

96 "catch_clause",

97 "finally_clause",

98 "switch_statement",

99 "switch_case",

100 "switch_default",

101 "variable_declaration",

102 "lexical_declaration",

103 "type_alias_declaration",

104 "interface_declaration",

105 "enum_declaration",

106 "break_statement",

107 "continue_statement",

108 "labeled_statement",

109 "with_statement",

110 "debugger_statement",

111 "new_expression",

112}

113

114 _TS_OPERAND_TYPES = {

115 "identifier",

116 "property_identifier",

117 "shorthand_property_identifier",

118 "number",

119 "string",

120 "template_string",

121 "template_substitution",

122 "regex",

123 "true",

124 "false",

125 "null",

126 "undefined",

127 "this",

128 "super",

129 "type_identifier",

130}

131

132 _TS_COMMENT_TYPES = {"comment"}

133

134

135 compute_halstead_ts = make_compute_halstead(

136 _TS_COMMENT_TYPES, _TS_KEYWORD_OPERATORS, _TS_OPERAND_TYPES, _TS_OPERATOR_TOKENS

137)