mirror of
https://github.com/vim/vim.git
synced 2025-07-04 23:07:33 -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)'
|