|
1 | | -# Code Metrics - Visual Studio Code Extension |
| 1 | +# Code Complexity - Fork of Code Metrics |
2 | 2 |
|
3 | | -Computes complexity in TypeScript / JavaScript / Lua files. |
| 3 | +Fork of https://github.com/kisstkondoros/codemetrics |
4 | 4 |
|
5 | | -# Complexity calculation |
6 | | - |
7 | | -The steps of the calculation: |
8 | | - |
9 | | -- create an AST from the input source file |
10 | | -- walk through each and every node of it |
11 | | -- depending on the type of the node and the configuration associated with it create a new entry about the node. |
12 | | - This entry contains everything necessary for further use |
13 | | - (e.g. a textual representation for the node, complexity increment, child nodes etc.) |
14 | | -- show the sum of complexity of child nodes for methods and the maximum of child nodes for classes |
15 | | - |
16 | | -Please note that it is not a standard metric, but it is a close approximation |
17 | | -of [Cyclomatic complexity](https://en.wikipedia.org/wiki/Cyclomatic_complexity). |
18 | | - |
19 | | -Please also note that it is possible to balance the complexity calculation for the |
20 | | -project / team / personal taste by adjusting the relevant configuration entries |
21 | | -(content assist is provided for all of them for easier configuration). |
22 | | - |
23 | | -For example if one prefers [guard clauses](https://refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html), |
24 | | -and is ok with all the branches in switch statements then the following could be applied: |
25 | | - |
26 | | -```json |
27 | | -"codemetrics.nodeconfiguration.ReturnStatement": 0, |
28 | | -"codemetrics.nodeconfiguration.CaseClause": 0, |
29 | | -"codemetrics.nodeconfiguration.DefaultClause": 0 |
30 | | -``` |
31 | | - |
32 | | -If You want to know the causes You can click on the code lens to list all the entries for a given method or class. (This also allows You to quickly navigate to the corresponding code) |
33 | | - |
34 | | - |
35 | | - |
36 | | -## It looks like this |
37 | | - |
38 | | - |
39 | | - |
40 | | - |
41 | | - |
42 | | - |
43 | | - |
44 | | -## Install |
45 | | - |
46 | | -[How to install Visual Studio Code extensions](https://code.visualstudio.com/docs/editor/extension-gallery) |
47 | | - |
48 | | -[Direct link to Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=kisstkondoros.vscode-codemetrics) |
49 | | - |
50 | | -## Customization |
51 | | - |
52 | | -In the workspace settings one can override the defaults. |
53 | | -For a complete list please check the configuration section in the package.json. |
54 | | -For the most commonly used ones, one should do a search for `codemetrics.basics` |
55 | | -in the settings ui. |
56 | | - |
57 | | -```javascript |
58 | | -{ |
59 | | - // highest complexity level will be set when it exceeds 15 |
60 | | - "codemetrics.basics.ComplexityLevelExtreme" : 15, |
61 | | - |
62 | | - // Hides code lenses with complexity lesser than the given value |
63 | | - "codemetrics.basics.CodeLensHiddenUnder" : 5, |
64 | | - |
65 | | - // Description for the highest complexity level |
66 | | - "codemetrics.basics.ComplexityLevelExtremeDescription" : "OMG split this up!", |
67 | | - |
68 | | - // someone uses 'any', it must be punished |
69 | | - "codemetrics.nodeconfiguration.AnyKeyword": 100 |
70 | | -} |
71 | | -``` |
72 | | - |
73 | | -## Commands |
74 | | - |
75 | | -- Toggle code lenses for arrow functions |
76 | | -- Toggle code metrics |
77 | | - |
78 | | -They can be bound in the keybindings.json (File -> Preferences -> Keyboard Shortcuts) |
79 | | - |
80 | | -```javascript |
81 | | -{ "key": "f4", "command": "codemetrics.toggleCodeMetricsForArrowFunctions", |
82 | | - "when": "editorTextFocus" }, |
83 | | -{ "key": "f5", "command": "codemetrics.toggleCodeMetricsDisplayed", |
84 | | - "when": "editorTextFocus" } |
85 | | -``` |
86 | | - |
87 | | -### Change Log |
88 | | - |
89 | | -- 1.26.1 |
90 | | - - Update tsmetrics-core to 1.4.1 (fixes default for `IfWithElseStatement` ) |
91 | | -- 1.26.0 |
92 | | - - Update tsmetrics-core to 1.4.0 (comes with a new config `IgnoredFunctionNames`) |
93 | | -- 1.25.2 |
94 | | - - Update tsmetrics-core to 1.3.1 |
95 | | -- 1.25.1 |
96 | | - - Update tsmetrics-core to 1.3.0 |
97 | | -- 1.25.0 |
98 | | - - Update dependencies |
99 | | - - Make it work for vue setup scripts |
100 | | -- 1.24.0 |
101 | | - - Jump to selection from the quick pick menu |
102 | | -- 1.23.1 |
103 | | - - Update dependencies |
104 | | -- 1.23.0 |
105 | | - - Use QuickPickItems instead of plain strings |
106 | | - - Update tsmetrics-core to 1.2.1 |
107 | | -- 1.22.1 |
108 | | - - Update change log |
109 | | -- 1.22.0 |
110 | | - - Update the activationEvents property (contribution from [@igorskyflyer](https://github.com/igorskyflyer) ) |
111 | | - - Add "onLanguage:vue" to the list of activation events |
112 | | -- 1.21.0 |
113 | | - - Show all items in the quick pick menu |
114 | | -- 1.20.0 |
115 | | - - Migrate to webpack |
116 | | - - Adjust section about configuration options |
117 | | - - Update tsmetrics-core |
118 | | -- 1.19.1 |
119 | | - - Update dependencies |
120 | | -- 1.19.0 |
121 | | - - Add support for ts based vue components |
122 | | -- 1.18.1 |
123 | | - - Update dependencies |
124 | | - - Fix rounding issues |
125 | | -- 1.18.0 |
126 | | - - Add DecorationTemplate configuration (contribution from [@luchsamapparat](https://github.com/luchsamapparat) ) |
127 | | -- 1.17.4 |
128 | | - - Update dependencies |
129 | | -- 1.17.3 |
130 | | - - Update dependencies |
131 | | -- 1.17.2 |
132 | | - - Fix invalid default color definition |
133 | | -- 1.17.1 |
134 | | - - Add file and untitled scheme explicitly |
135 | | -- 1.17.0 |
136 | | - - Adjust codebase to new API standards of VSCode |
137 | | - - Adjust filter boundaries which are used for color decorators |
138 | | -- 1.16.0 |
139 | | - - Update dev dependency for vscode to avoid vulnerability warning |
140 | | - - Add description about complexity calculation and configuration |
141 | | -- 1.15.0 |
142 | | - - Update tsmetrics-core to v1.0.0 |
143 | | -- 1.14.0 |
144 | | - - Make decoration colors configurable |
145 | | - - The following properties were introduced: |
146 | | - - codemetrics.basics.ComplexityColorLow |
147 | | - - codemetrics.basics.ComplexityColorNormal |
148 | | - - codemetrics.basics.ComplexityColorHigh |
149 | | - - codemetrics.basics.ComplexityColorExtreme |
150 | | -- 1.13.0 |
151 | | - - Update vscode version to 1.1.10 |
152 | | - - Avoid indentation distortion by moving decorations to the end of the line |
153 | | - - Debounce EditorDecoration update requests properly |
154 | | -- 1.12.0 |
155 | | - - Add support for Visual Studio Live Share |
156 | | -- 1.11.2 |
157 | | - - Improve decorator lifecycle management |
158 | | -- 1.11.1 |
159 | | - - Only create new decorations if the settings has changed |
160 | | -- 1.11.0 |
161 | | - - Add new mode OverviewRuler |
162 | | - - Update tsmetrics-core and typescript dependencies |
163 | | -- 1.10.0 |
164 | | - - Add support for embedded scripts in vue and html files |
165 | | -- 1.9.6 |
166 | | - - Disable diagnostic report for code metrics |
167 | | -- 1.9.5 |
168 | | - - Add .vscode-test to .vscodeignore |
169 | | -- 1.9.4 |
170 | | - - Replace new line characters in quick pick menu with spaces |
171 | | -- 1.9.3 |
172 | | - - Update readme |
173 | | -- 1.9.2 |
174 | | - - Fix behavior of command 'codemetrics.toggleCodeMetricsForArrowFunctions' |
175 | | -- 1.9.1 |
176 | | - - Set default of ObjectLiteralExpression to 0 |
177 | | -- 1.9.0 |
178 | | - - Implement file exclusion by glob pattern |
179 | | -- 1.8.0 |
180 | | - |
181 | | - - Use new collector types from tsmetrics-core (show complexity maximum on class level) |
182 | | -- 1.7.2 |
183 | | - - Make it possible to enable / disable diagnostics |
184 | | -- 1.7.1 |
185 | | - - Always use activeTextEditor in change callbacks |
186 | | -- 1.7.0 |
187 | | - - Add experimental diagnostics support |
188 | | - - Add experimental support for Lua |
189 | | -- 1.6.1 |
190 | | - - Fix spelling error of 'threshold' in configuration |
191 | | -- 1.6.0 |
192 | | - - Execute code metrics computation in language server |
193 | | -- 1.5.0 |
194 | | - - Upgrade vsdcode and typescript dependency |
195 | | - - Remove unused typings |
196 | | - - Extract code metrics related util class |
197 | | - - Move CodeMetricsCodeLensProvider to codelensprovider folder |
198 | | - - Add text decoration based on code metrics |
199 | | - - Appearance can be configured with the following properties: |
200 | | - - "codemetrics.basics.DecorationModeEnabled" |
201 | | - - "codemetrics.basics.CodeLensEnabled" |
202 | | -- 1.4.1 |
203 | | - - Update changelog |
204 | | -- 1.4.0 |
205 | | - - Expose code lens location related configuration properties |
206 | | - - "codemetrics.basics.MetricsForClassDeclarationsToggled" |
207 | | - - "codemetrics.basics.MetricsForConstructorsToggled" |
208 | | - - "codemetrics.basics.MetricsForEnumDeclarationsToggled" |
209 | | - - "codemetrics.basics.MetricsForFunctionDeclarationsToggled" |
210 | | - - "codemetrics.basics.MetricsForFunctionExpressionsToggled" |
211 | | - - "codemetrics.basics.MetricsForMethodDeclarationsToggled" |
212 | | - - "codemetrics.basics.MetricsForArrowFunctionsToggled" |
213 | | -- 1.3.0 |
214 | | - - Add new properties to selectively disable codemetrics for different languages |
215 | | - - "codemetrics.basics.EnabledForTSX" |
216 | | - - "codemetrics.basics.EnabledForJSX" |
217 | | - - "codemetrics.basics.EnabledForTS" |
218 | | - - "codemetrics.basics.EnabledForJS" |
219 | | - - Introduce file size limit |
220 | | - - "codemetrics.basics.FileSizeLimitMB" default is 0.5 MB |
221 | | -- 1.2.2 |
222 | | - - Fix behaviour of CodeLensHiddenUnder |
223 | | -- 1.2.1 |
224 | | - - Change type of IfWithElseStatement property to number |
225 | | -- 1.2.0 |
226 | | - - Add JSX and TSX support, special thanks to [Aron Adler](https://github.com/Arrow7000) |
227 | | -- 1.1.6 |
228 | | - - Fix possible NPE in 'triggerCodeLensComputation' |
229 | | - - Remove language restriction from 'activationEvents' |
230 | | -- 1.1.5 |
231 | | - - Udpate logo |
232 | | -- 1.1.4 |
233 | | - - Change textual representation in quick pick |
234 | | -- 1.1.3 |
235 | | - - Fix typo in codemetrics.basics.ComplexityLevelNormalDescription |
236 | | -- 1.1.2 |
237 | | - - Fix dependency issue with 'fs' |
238 | | -- 1.1.1 |
239 | | - - Fix issue with non up to date source file processing |
240 | | -- 1.1.0 |
241 | | - - Parse logic refactored to be a separate npm module [tsmetrics-core](https://www.npmjs.com/package/tsmetrics-core) allowing to create a gulp plugin as well [gulp-tsmetrics](https://www.npmjs.com/package/gulp-tsmetrics) |
242 | | - - QuickPick now works with a simplified and more meaningful list, which shows only one level of the hierarchy at once |
243 | | -- 1.0.1 |
244 | | - - Default keyboard bindings removed |
245 | | - - CodeLens cache invalidation side effect eliminated (dirty file) |
246 | | - - Path concatenation replaced with path.join |
247 | | -- 1.0.0 |
248 | | - - Configuration properties has been renamed and listed in extension manifest |
249 | | - - New property CodeLensHiddenUnder introduced to be able to hide uninteresting code lenses |
250 | | -- 0.5.0 |
251 | | - - Commands to alter code metrics behaviour added (toggle code metrics and toggle code lenses for arrow functions) |
252 | | -- 0.4.1 |
253 | | - - Showing complexity for arrow functions as well |
254 | | -- 0.4.0 |
255 | | - - Added JavaScript support |
256 | | - - Removed module declaration from the complexity calculation |
257 | | - - Function related complexity calculation revised |
258 | | -- 0.3.1 |
259 | | - - Fixed NPE in navigation command |
260 | | -- 0.3.0 |
261 | | - - Use script target defined in tsconfig |
262 | | -- 0.2.0 |
263 | | - - Code Metrics info command changed to display a QuickPick menu |
264 | | -- 0.1.0 |
265 | | - - Added command to be able to show code lens details |
266 | | -- 0.0.2 |
267 | | - - TypeScript added as real dependency |
268 | | -- 0.0.1 |
269 | | - - Initial project setup |
270 | | - |
271 | | -### License |
272 | | - |
273 | | -Licensed under MIT |
| 5 | +Difference is that instead of 4 levels of color decoration, there are 24 levels. |
0 commit comments