mirror of
				https://github.com/vim/vim.git
				synced 2025-10-26 09:14:23 -04:00 
			
		
		
		
	Currently, the overriding object method definitions are matched as vimFunctionError (:help builtin-object-methods, v9.1.0148). For example: ------------------------------------------------------------ vim9script class Test def string(): string return "Test" enddef endclass echo string(Test.new()) == Test.new().string() ------------------------------------------------------------ Instead, let's introduce a new syntax group vimMethodName and make these methods its members. In order to emphasise the link between the overriding methods and the overridden functions for highlighting, vimMethodName is linked by default to vimFuncName. Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| vim9script
 | |
| # VIM_TEST_SETUP hi link vimMethodName Todo
 | |
| 
 | |
| 
 | |
| # Vim |builtin-object-methods| and namesake builtin functions.
 | |
| class PairClassTest
 | |
| 	public const a: any
 | |
| 	public const b: any
 | |
| 
 | |
| 	def new(a: any, b: any)
 | |
| 		this.a = a
 | |
| 		this.b = b
 | |
| 	enddef
 | |
| 
 | |
| 	def empty(): bool
 | |
| 		return false
 | |
| 	enddef
 | |
| 	def len(): number
 | |
| 		return 2
 | |
| 	enddef
 | |
| 	def string(): string
 | |
| 		return printf('(%s, %s)', this.a, this.b)
 | |
| 	enddef
 | |
| endclass
 | |
| 
 | |
| enum MarkerEnumTest
 | |
| 	INSTANCE
 | |
| 
 | |
| 	def NoOp()
 | |
| 	enddef
 | |
| 
 | |
| 	def empty(): bool
 | |
| 		return true
 | |
| 	enddef
 | |
| 	def len(): number
 | |
| 		return 0
 | |
| 	enddef
 | |
| 	def string(): string
 | |
| 		return this.name
 | |
| 	enddef
 | |
| endenum
 | |
| 
 | |
| const b1: bool = empty(MarkerEnumTest.INSTANCE)
 | |
| const n1: number = len(MarkerEnumTest.INSTANCE)
 | |
| const s1: string = string(MarkerEnumTest.INSTANCE)
 | |
| echo b1 && MarkerEnumTest.INSTANCE.empty()
 | |
| echo n1 == 0 && MarkerEnumTest.INSTANCE.len() == 0
 | |
| echo s1 == 'INSTANCE' && MarkerEnumTest.INSTANCE.string() == 'INSTANCE'
 | |
| 
 | |
| const pair: PairClassTest = PairClassTest.new(0, 1)
 | |
| const b2: bool = !pair.empty()
 | |
| const n2: number = pair.len()
 | |
| const s2: string = pair.string()
 | |
| echo b2 && !empty(pair)
 | |
| echo n2 == 2 && len(pair) == 2
 | |
| echo s2 == '(0, 1)' && string(pair) == '(0, 1)'
 |