This is an archive of the discontinued LLVM Phabricator instance.

[ClangRepl] support code completion at the repl
AbandonedPublic

Authored by capfredf on Aug 23 2023, 8:37 AM.

Details

Reviewers
None
Summary

This patch enabled code completion for ClangREPL. The feature was built upon three
existing Clang components: a list completer for LineEditor,
a CompletionConsumer from SemaCodeCompletion, and the ASTUnit::codeComplete method.
with the first component serving as the main entry point of handling interactive inputs.

Because a completion point for a compiler instance has to be unchanged once it
is set, an incremental compiler instance is created for each code
completion. Such a compiler instance carries over AST context source from the
main interpreter compiler in order to obtain declarations or bindings from
previous input in the same REPL session.

The most important API codeComplete in Interpreter/CodeCompletion is a thin
wrapper that calls with ASTUnit::codeComplete with necessary arguments, such as
a code completion point and a ReplCompletionConsumer, which communicates
completion results from SemaCodeCompletion back to the list completer for the
REPL.

In addition, PCC_TopLevelOrExpression and CCC_TopLevelOrExpression` top levels
were added so that SemaCodeCompletion can treat top level statements like
expression statements at the REPL. For example,

clang-repl> int foo = 42;
clang-repl> f<tab>

From a parser's persective, the cursor is at a top level. If we used code
completion without any changes, PCC_Namespace would be supplied to
Sema::CodeCompleteOrdinaryName, and thus the completion results would not
include foo.

Currently, the way we use PCC_TopLevelOrExpression and
CCC_TopLevelOrExpression is no different from the way we use PCC_Statement
and CCC_Statement respectively.

Previous Differential Revision: https://reviews.llvm.org/D154382

Diff Detail

Event Timeline

capfredf created this revision.Aug 23 2023, 8:37 AM
Herald added a project: Restricted Project. · View Herald TranscriptAug 23 2023, 8:37 AM
capfredf requested review of this revision.Aug 23 2023, 8:37 AM
Herald added projects: Restricted Project, Restricted Project. · View Herald TranscriptAug 23 2023, 8:37 AM
Herald added a subscriber: cfe-commits. · View Herald Transcript
capfredf abandoned this revision.Aug 23 2023, 8:39 AM