mirror of
				https://github.com/flynx/argv.js.git
				synced 2025-10-31 03:30:08 +00:00 
			
		
		
		
	refactoring and simplification....
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									b0baf7e7f8
								
							
						
					
					
						commit
						0c214bd034
					
				
							
								
								
									
										43
									
								
								argv.js
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								argv.js
									
									
									
									
									
								
							| @ -353,8 +353,6 @@ object.Constructor('Parser', { | |||||||
| 	optionPattern: /^--?(.*)$/, | 	optionPattern: /^--?(.*)$/, | ||||||
| 	commandPattern: /^([a-zA-Z].*)$/, | 	commandPattern: /^([a-zA-Z].*)$/, | ||||||
| 
 | 
 | ||||||
| 	initCheck: true, |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| 	// instance stuff...
 | 	// instance stuff...
 | ||||||
| 	argv: null, | 	argv: null, | ||||||
| @ -411,6 +409,9 @@ object.Constructor('Parser', { | |||||||
| 	isCommand: function(str){ | 	isCommand: function(str){ | ||||||
| 		return this.commandPattern.test(str)  | 		return this.commandPattern.test(str)  | ||||||
| 			&& (this.commandPrefix + str) in this }, | 			&& (this.commandPrefix + str) in this }, | ||||||
|  | 
 | ||||||
|  | 	// NOTE: this ignores options forming alias loops and dead-end 
 | ||||||
|  | 	// 		options...
 | ||||||
| 	getHandler: function(key){ | 	getHandler: function(key){ | ||||||
| 		key = this.optionPattern.test(key) ? | 		key = this.optionPattern.test(key) ? | ||||||
| 			key.replace(this.optionPattern, this.optionPrefix+'$1') | 			key.replace(this.optionPattern, this.optionPrefix+'$1') | ||||||
| @ -421,9 +422,20 @@ object.Constructor('Parser', { | |||||||
| 			key = this[key]  | 			key = this[key]  | ||||||
| 			// check for loops...
 | 			// check for loops...
 | ||||||
| 			if(seen.has(key)){ | 			if(seen.has(key)){ | ||||||
| 				throw new Error('Option loop detected: '+ ([...seen, key].join(' -> '))) } | 				return [key, undefined,  | ||||||
|  | 					// report loop...
 | ||||||
|  | 					'loop', [...seen, key]] } | ||||||
|  | 				//throw new Error('Option loop detected: '+ ([...seen, key].join(' -> '))) }
 | ||||||
| 			seen.add(key) } | 			seen.add(key) } | ||||||
| 		return [key, this[key]] }, | 		return [key, this[key],  | ||||||
|  | 			// report dead-end if this[key] is undefined...
 | ||||||
|  | 			...(this[key] ?  | ||||||
|  | 				[] | ||||||
|  | 				: ['dead-end'])] }, | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	// XXX need to test option definitions... (???)
 | ||||||
|  | 	// 		i.e. report loops and dead ends...
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	// doc stuff...
 | 	// doc stuff...
 | ||||||
| @ -478,7 +490,13 @@ object.Constructor('Parser', { | |||||||
| 					...section('Options', | 					...section('Options', | ||||||
| 						this.options() | 						this.options() | ||||||
| 							.map(function([opts, arg, doc]){ | 							.map(function([opts, arg, doc]){ | ||||||
| 								return [ opts.join(' | -') +' '+ (arg || ''), doc] })), | 								return [  | ||||||
|  | 									opts | ||||||
|  | 										.sort(function(a, b){  | ||||||
|  | 											return a.length - b.length}) | ||||||
|  | 										.join(' | -')  | ||||||
|  | 											+' '+ (arg || ''),  | ||||||
|  | 									doc] })), | ||||||
| 					// dynamic options...
 | 					// dynamic options...
 | ||||||
| 					...section('Dynamic options', | 					...section('Dynamic options', | ||||||
| 						this.handleArgument ?  | 						this.handleArgument ?  | ||||||
| @ -515,8 +533,13 @@ object.Constructor('Parser', { | |||||||
| 
 | 
 | ||||||
| 			// XXX should we explicitly exit here or in the runner???
 | 			// XXX should we explicitly exit here or in the runner???
 | ||||||
| 			return module.STOP }}, | 			return module.STOP }}, | ||||||
| 	// common shorthands...
 | 
 | ||||||
|  | 	// common short-hands...
 | ||||||
|  | 	// NOTE: defining this as a loop will enable the user to define any 
 | ||||||
|  | 	// 		of the aliases as the handler and thus breaking the loop...
 | ||||||
|  | 	// NOTE: unless the loop is broken this set of options is not usable.
 | ||||||
| 	'-v': '-verbose', | 	'-v': '-verbose', | ||||||
|  | 	'-verbose': '-v', | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	//
 | 	//
 | ||||||
| @ -607,7 +630,7 @@ object.Constructor('Parser', { | |||||||
| 			// options / commands...
 | 			// options / commands...
 | ||||||
| 			if(type != 'unhandled'){ | 			if(type != 'unhandled'){ | ||||||
| 				// get handler...
 | 				// get handler...
 | ||||||
| 				var handler = this.getHandler(arg).pop() | 				var handler = this.getHandler(arg)[1] | ||||||
| 						|| this.handleArgument | 						|| this.handleArgument | ||||||
| 				// get option value...
 | 				// get option value...
 | ||||||
| 				var value = (handler.arg && !opt_pattern.test(argv[0])) ? | 				var value = (handler.arg && !opt_pattern.test(argv[0])) ? | ||||||
| @ -642,11 +665,7 @@ object.Constructor('Parser', { | |||||||
| 
 | 
 | ||||||
| 	// NOTE: see general doc...
 | 	// NOTE: see general doc...
 | ||||||
| 	__init__: function(spec){ | 	__init__: function(spec){ | ||||||
| 		Object.assign(this, spec) | 		Object.assign(this, spec) }, | ||||||
| 
 |  | ||||||
| 		// check for alias loops...
 |  | ||||||
| 		this.initCheck |  | ||||||
| 			&& this.options(this.optionPrefix, this.commandPrefix) }, |  | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user