- enhancement: Auto type induction for "std::make_shared"/"std::make_unique"
This commit is contained in:
parent
5d1b874bdf
commit
c6c7d92e1c
1
NEWS.md
1
NEWS.md
|
@ -141,6 +141,7 @@ Red Panda C++ Version 2.27
|
||||||
- fix: Shouldn't consider preceeding '&'/'*' when popping completion suggest list for variable members.
|
- fix: Shouldn't consider preceeding '&'/'*' when popping completion suggest list for variable members.
|
||||||
- fix: Positions of current matching parenthesis not correctly updated.
|
- fix: Positions of current matching parenthesis not correctly updated.
|
||||||
- fix: Can't show correct completion info for vars declared with template parameters ending with ">>".
|
- fix: Can't show correct completion info for vars declared with template parameters ending with ">>".
|
||||||
|
- enhancement: Auto type induction for "std::make_shared"/"std::make_unique".
|
||||||
|
|
||||||
Red Panda C++ Version 2.26
|
Red Panda C++ Version 2.26
|
||||||
- enhancement: Code suggestion for embedded std::vectors.
|
- enhancement: Code suggestion for embedded std::vectors.
|
||||||
|
|
|
@ -4108,8 +4108,18 @@ void CppParser::handleVar(const QString& typePrefix,bool isExtern,bool isStatic,
|
||||||
if(aliasStatement) {
|
if(aliasStatement) {
|
||||||
if (aliasStatement->typeStatement) {
|
if (aliasStatement->typeStatement) {
|
||||||
addedVar->type = aliasStatement->typeStatement->fullName;
|
addedVar->type = aliasStatement->typeStatement->fullName;
|
||||||
if (!addedVar->type.endsWith(">"))
|
if (!aliasStatement->templateParams.isEmpty()) {
|
||||||
|
if (!addedVar->type.endsWith(">")) {
|
||||||
addedVar->type += aliasStatement->templateParams;
|
addedVar->type += aliasStatement->templateParams;
|
||||||
|
} else {
|
||||||
|
QString type = addedVar->type;
|
||||||
|
int pos = type.indexOf('<');
|
||||||
|
if (pos>=0) {
|
||||||
|
type = type.left(pos);
|
||||||
|
addedVar->type = type + aliasStatement->templateParams;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (aliasStatement->typeStatement
|
if (aliasStatement->typeStatement
|
||||||
&& STLIterators.contains(aliasStatement->typeStatement->command)
|
&& STLIterators.contains(aliasStatement->typeStatement->command)
|
||||||
&& !aliasStatement->templateParams.isEmpty()) {
|
&& !aliasStatement->templateParams.isEmpty()) {
|
||||||
|
@ -5379,13 +5389,17 @@ PEvalStatement CppParser::doEvalTerm(const QString &fileName,
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
result->pointerLevel = pointerLevel;
|
result->pointerLevel = pointerLevel;
|
||||||
|
} else if (result && result->kind == EvalStatementKind::Function
|
||||||
|
&& pos<phraseExpression.length()
|
||||||
|
&& phraseExpression[pos]=='<') {
|
||||||
|
result->templateParams = "";
|
||||||
|
int oldPos = pos;
|
||||||
|
doSkipInExpression(phraseExpression,pos,"<",">");
|
||||||
|
for(int i=oldPos;i<pos;i++) {
|
||||||
|
result->templateParams+=phraseExpression[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// qDebug()<<pos<<" term end";
|
|
||||||
// if (!result) {
|
|
||||||
// qDebug()<<"not found !!!!";
|
|
||||||
// }
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5698,10 +5712,13 @@ PEvalStatement CppParser::doCreateEvalFunction(
|
||||||
int pointerLevel=0;
|
int pointerLevel=0;
|
||||||
QString templateParams;
|
QString templateParams;
|
||||||
PStatement typeStatement;
|
PStatement typeStatement;
|
||||||
|
QString type = funcStatement->type;
|
||||||
|
if (funcStatement->fullName == "std::make_unique")
|
||||||
|
type = "unique_ptr";
|
||||||
PStatement effetiveTypeStatement = doParseEvalTypeInfo(
|
PStatement effetiveTypeStatement = doParseEvalTypeInfo(
|
||||||
fileName,
|
fileName,
|
||||||
funcStatement->parentScope.lock(),
|
funcStatement->parentScope.lock(),
|
||||||
funcStatement->type,
|
type,
|
||||||
baseType,
|
baseType,
|
||||||
typeStatement,
|
typeStatement,
|
||||||
pointerLevel,
|
pointerLevel,
|
||||||
|
|
Loading…
Reference in New Issue