updated for version 7.3.1047
Problem: Python: dir() does not work properly.
Solution: Python patch 8. Add __dir__ method to all objects with custom
tp_getattr supplemented by __members__ attribute for at least
python-2* versions. __members__ is not mentioned in python-3*
dir() output even if it is accessible. (ZyX)
diff --git a/src/testdir/test86.in b/src/testdir/test86.in
index 267657c..45c345f 100644
--- a/src/testdir/test86.in
+++ b/src/testdir/test86.in
@@ -691,6 +691,24 @@
cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
EOF
:"
+:" Test __dir__() method
+py << EOF
+for name, o in (
+ ('current', vim.current),
+ ('buffer', vim.current.buffer),
+ ('window', vim.current.window),
+ ('tabpage', vim.current.tabpage),
+ ('range', vim.current.range),
+ ('dictionary', vim.bindeval('{}')),
+ ('list', vim.bindeval('[]')),
+ ('function', vim.bindeval('function("tr")')),
+ ('output', sys.stdout),
+ ):
+ cb.append(name + ':' + ','.join(dir(o)))
+del name
+del o
+EOF
+:"
:" Test exceptions
:fun Exe(e)
: execute a:e
diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok
index efa8001..f44ebf7 100644
--- a/src/testdir/test86.ok
+++ b/src/testdir/test86.ok
@@ -382,6 +382,15 @@
vim.current.range:Range:True
vim.current.window:Window:True
vim.current.tabpage:TabPage:True
+current:__dir__,__members__,buffer,line,range,tabpage,window
+buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars
+window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
+tabpage:__dir__,__members__,number,valid,vars,window,windows
+range:__dir__,__members__,append,end,start
+dictionary:__dir__,__members__,keys,locked,scope
+list:__dir__,__members__,extend,locked
+function:__call__,__dir__,__members__,softspace
+output:__dir__,__members__,flush,softspace,write,writelines
(<class 'vim.error'>, error('abc',))
(<class 'vim.error'>, error('def',))
(<class 'vim.error'>, error('ghi',))
diff --git a/src/testdir/test87.in b/src/testdir/test87.in
index 8f70fcf..210c055 100644
--- a/src/testdir/test87.in
+++ b/src/testdir/test87.in
@@ -669,6 +669,24 @@
cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
EOF
:"
+:" Test __dir__() method
+py3 << EOF
+for name, o in (
+ ('current', vim.current),
+ ('buffer', vim.current.buffer),
+ ('window', vim.current.window),
+ ('tabpage', vim.current.tabpage),
+ ('range', vim.current.range),
+ ('dictionary', vim.bindeval('{}')),
+ ('list', vim.bindeval('[]')),
+ ('function', vim.bindeval('function("tr")')),
+ ('output', sys.stdout),
+ ):
+ cb.append(name + ':' + ','.join(dir(o)))
+del name
+del o
+EOF
+:"
:" Test exceptions
:fun Exe(e)
: execute a:e
diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok
index c04d220..3b39c18 100644
--- a/src/testdir/test87.ok
+++ b/src/testdir/test87.ok
@@ -371,6 +371,15 @@
vim.current.range:Range:True
vim.current.window:Window:True
vim.current.tabpage:TabPage:True
+current:__dir__,buffer,line,range,tabpage,window
+buffer:__dir__,append,mark,name,number,options,range,valid,vars
+window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
+tabpage:__dir__,number,valid,vars,window,windows
+range:__dir__,append,end,start
+dictionary:__dir__,keys,locked,scope
+list:__dir__,extend,locked
+function:__call__,__dir__,softspace
+output:__dir__,flush,softspace,write,writelines
(<class 'vim.error'>, error('abc',))
(<class 'vim.error'>, error('def',))
(<class 'vim.error'>, error('ghi',))