Introduce line editor library.
authorPeter Collingbourne <peter@pcc.me.uk>
Fri, 31 Jan 2014 23:46:14 +0000 (23:46 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Fri, 31 Jan 2014 23:46:14 +0000 (23:46 +0000)
commitcb6684b63b3c4c5a90e194c5719bc82690180f30
treeb436db0df9f0c8d4f88b046f928a951fbf23cfff
parentbef2236283c333f17613b2ea4904878228fedb6e
Introduce line editor library.

This library will be used by clang-query. I can imagine LLDB becoming another
client of this library, so I think LLVM is a sensible place for it to live.
It wraps libedit, and adds tab completion support.

The code is loosely based on the line editor bits in LLDB, with a few
improvements:

 - Polymorphism for retrieving the list of tab completions, based on
   the concept pattern from the new pass manager.

 - Tab completion doesn't corrupt terminal output if the input covers
   multiple lines. Unfortunately this can only be done in a truly horrible
   way, as far as I can tell. But since the alternative is to implement our
   own line editor (which I don't think LLVM should be in the business of
   doing, at least for now) I think it may be acceptable.

 - Includes a fallback for the case where the user doesn't have libedit
   installed.

Note that this uses C stdio, mainly because libedit also uses C stdio.

Differential Revision: http://llvm-reviews.chandlerc.com/D2200

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200595 91177308-0d34-0410-b5e6-96231b3b80d8
18 files changed:
autoconf/configure.ac
cmake/config-ix.cmake
configure
include/llvm/Config/config.h.cmake
include/llvm/Config/config.h.in
include/llvm/LineEditor/LineEditor.h [new file with mode: 0644]
lib/CMakeLists.txt
lib/LLVMBuild.txt
lib/LineEditor/CMakeLists.txt [new file with mode: 0644]
lib/LineEditor/LLVMBuild.txt [new file with mode: 0644]
lib/LineEditor/LineEditor.cpp [new file with mode: 0644]
lib/LineEditor/Makefile [new file with mode: 0644]
lib/Makefile
unittests/CMakeLists.txt
unittests/LineEditor/CMakeLists.txt [new file with mode: 0644]
unittests/LineEditor/LineEditor.cpp [new file with mode: 0644]
unittests/LineEditor/Makefile [new file with mode: 0644]
unittests/Makefile