forked from zhurui/management
				
			
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
| /**
 | |
|  * @author Toru Nagashima
 | |
|  * See LICENSE file in root directory for full license.
 | |
|  */
 | |
| "use strict"
 | |
| 
 | |
| const { ReferenceTracker } = require("eslint-utils")
 | |
| 
 | |
| /**
 | |
|  * Verifier for `prefer-global/*` rules.
 | |
|  */
 | |
| class Verifier {
 | |
|     /**
 | |
|      * Initialize this instance.
 | |
|      * @param {RuleContext} context The rule context to report.
 | |
|      * @param {{modules:object,globals:object}} trackMap The track map.
 | |
|      */
 | |
|     constructor(context, trackMap) {
 | |
|         this.context = context
 | |
|         this.trackMap = trackMap
 | |
|         this.verify =
 | |
|             context.options[0] === "never"
 | |
|                 ? this.verifyToPreferModules
 | |
|                 : this.verifyToPreferGlobals
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Verify the code to suggest the use of globals.
 | |
|      * @returns {void}
 | |
|      */
 | |
|     verifyToPreferGlobals() {
 | |
|         const { context, trackMap } = this
 | |
|         const tracker = new ReferenceTracker(context.getScope(), {
 | |
|             mode: "legacy",
 | |
|         })
 | |
| 
 | |
|         for (const { node } of [
 | |
|             ...tracker.iterateCjsReferences(trackMap.modules),
 | |
|             ...tracker.iterateEsmReferences(trackMap.modules),
 | |
|         ]) {
 | |
|             context.report({ node, messageId: "preferGlobal" })
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Verify the code to suggest the use of modules.
 | |
|      * @returns {void}
 | |
|      */
 | |
|     verifyToPreferModules() {
 | |
|         const { context, trackMap } = this
 | |
|         const tracker = new ReferenceTracker(context.getScope())
 | |
| 
 | |
|         for (const { node } of tracker.iterateGlobalReferences(
 | |
|             trackMap.globals
 | |
|         )) {
 | |
|             context.report({ node, messageId: "preferModule" })
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| module.exports = function checkForPreferGlobal(context, trackMap) {
 | |
|     new Verifier(context, trackMap).verify()
 | |
| }
 |