stage 1 finished: use the expression token list in the editor to completion,

instead of just the expression string
This commit is contained in:
Roy Qu 2021-12-03 21:07:40 +08:00
parent 890ad641ad
commit 20782fc221
2 changed files with 13 additions and 4 deletions

View File

@ -2592,9 +2592,12 @@ void Editor::showCompletion(const QString& preWord,bool autoComplete)
if (word.isEmpty()) { if (word.isEmpty()) {
//word=getWordAtPosition(this,caretXY(),pBeginPos,pEndPos, WordPurpose::wpCompletion); //word=getWordAtPosition(this,caretXY(),pBeginPos,pEndPos, WordPurpose::wpCompletion);
word = getExpressionAtPositionForCompletion(caretXY()).join(""); QStringList expression = getExpressionAtPositionForCompletion(caretXY());
} word = expression.join("");
mCompletionPopup->prepareSearch(preWord, expression, mFilename, pBeginPos.Line);
} else {
mCompletionPopup->prepareSearch(preWord, word, mFilename, pBeginPos.Line); mCompletionPopup->prepareSearch(preWord, word, mFilename, pBeginPos.Line);
}
// Filter the whole statement list // Filter the whole statement list
if (mCompletionPopup->search(word, autoComplete)) { //only one suggestion and it's not input while typing if (mCompletionPopup->search(word, autoComplete)) { //only one suggestion and it's not input while typing

View File

@ -854,6 +854,7 @@ void CodeCompletionPopup::getCompletionFor(const QStringList &expression, const
} }
} }
} }
if (lastMemberOperatorPos<0) { if (lastMemberOperatorPos<0) {
//the identifier to be completed is not a member of variable/class //the identifier to be completed is not a member of variable/class
if (mShowCodeSnippets) { if (mShowCodeSnippets) {
@ -932,7 +933,7 @@ void CodeCompletionPopup::getCompletionFor(const QStringList &expression, const
addChildren(nullptr, fileName, line); addChildren(nullptr, fileName, line);
return; return;
} }
QStringList ownerExpression = expression.mid(1,lastMemberOperatorPos); QStringList ownerExpression = expression.mid(0,lastMemberOperatorPos);
QStringList memberExpression = expression.mid(lastMemberOperatorPos+1); QStringList memberExpression = expression.mid(lastMemberOperatorPos+1);
if (memberExpression.length()==2 && memberExpression.front()!="~") if (memberExpression.length()==2 && memberExpression.front()!="~")
return; return;
@ -946,11 +947,16 @@ void CodeCompletionPopup::getCompletionFor(const QStringList &expression, const
scopeName, scopeName,
mCurrentStatement, mCurrentStatement,
parentTypeStatement); parentTypeStatement);
qDebug()<<scopeName;
qDebug()<<memberOperator;
qDebug()<<memberExpression;
if(!ownerStatement ) { if(!ownerStatement ) {
qDebug()<<"not found!";
return; return;
} }
qDebug()<<"found: "<<ownerStatement->fullName;
if (memberOperator == "::") { if (memberOperator == "::") {
if (ownerStatement->kind!=StatementKind::skNamespace) { if (ownerStatement->kind==StatementKind::skNamespace) {
//there might be many statements corresponding to one namespace; //there might be many statements corresponding to one namespace;
PStatementList namespaceStatementsList = PStatementList namespaceStatementsList =
mParser->findNamespace(ownerStatement->fullName); mParser->findNamespace(ownerStatement->fullName);