mirror of
				https://git.proxmox.com/git/pve-eslint
				synced 2025-10-31 03:01:45 +00:00 
			
		
		
		
	 eb39fafa4f
			
		
	
	
		eb39fafa4f
		
	
	
	
	
		
			
			includes a (minimal) working wrapper Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Disallow lexical declarations in case/default clauses (no-case-declarations)
 | |
| 
 | |
| This rule disallows lexical declarations (`let`, `const`, `function` and `class`)
 | |
| in `case`/`default` clauses. The reason is that the lexical declaration is visible
 | |
| in the entire switch block but it only gets initialized when it is assigned, which
 | |
| will only happen if the case where it is defined is reached.
 | |
| 
 | |
| To ensure that the lexical declaration only applies to the current case clause
 | |
| wrap your clauses in blocks.
 | |
| 
 | |
| ## Rule Details
 | |
| 
 | |
| This rule aims to prevent access to uninitialized lexical bindings as well as accessing hoisted functions across case clauses.
 | |
| 
 | |
| Examples of **incorrect** code for this rule:
 | |
| 
 | |
| ```js
 | |
| /*eslint no-case-declarations: "error"*/
 | |
| /*eslint-env es6*/
 | |
| 
 | |
| switch (foo) {
 | |
|     case 1:
 | |
|         let x = 1;
 | |
|         break;
 | |
|     case 2:
 | |
|         const y = 2;
 | |
|         break;
 | |
|     case 3:
 | |
|         function f() {}
 | |
|         break;
 | |
|     default:
 | |
|         class C {}
 | |
| }
 | |
| ```
 | |
| 
 | |
| Examples of **correct** code for this rule:
 | |
| 
 | |
| ```js
 | |
| /*eslint no-case-declarations: "error"*/
 | |
| /*eslint-env es6*/
 | |
| 
 | |
| // Declarations outside switch-statements are valid
 | |
| const a = 0;
 | |
| 
 | |
| switch (foo) {
 | |
|     // The following case clauses are wrapped into blocks using brackets
 | |
|     case 1: {
 | |
|         let x = 1;
 | |
|         break;
 | |
|     }
 | |
|     case 2: {
 | |
|         const y = 2;
 | |
|         break;
 | |
|     }
 | |
|     case 3: {
 | |
|         function f() {}
 | |
|         break;
 | |
|     }
 | |
|     case 4:
 | |
|         // Declarations using var without brackets are valid due to function-scope hoisting
 | |
|         var z = 4;
 | |
|         break;
 | |
|     default: {
 | |
|         class C {}
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## When Not To Use It
 | |
| 
 | |
| If you depend on fall through behavior and want access to bindings introduced in the case block.
 | |
| 
 | |
| ## Related Rules
 | |
| 
 | |
| * [no-fallthrough](no-fallthrough.md)
 |