tab.complete can be used standalone. not mutating _