<p>You anyway need the exact range that you want to replace, so I don't see the problem specific to DocumentChange. You can simply read the old text from the range out of the editor. That somewhat defeats the purpose 'safety', as it might happen that you replace _anything_. Your idea with the AST would be the best, but might be some work. It's the only way to reliably get the whole range that needs to be replaced.</p>

<p>Greetings, David</p>
<p><blockquote type="cite">Am 06.07.2010 12:25 schrieb "Milian Wolff" <<a href="mailto:mail@milianw.de">mail@milianw.de</a>>:<br><br>Hey there,<br>
<br>
while trying to revive the SignatureAssistant for changes in the return type,<br>
I saw (again, had the same problems with constness) that DocumentChange is<br>
totally unpractical here.<br>
<br>
The thing is that for safety reasons we need to _exact_ old string and then<br>
replace that or parts of it with changes. Sounds nice. But: We don't access<br>
the acutal written document, hence only "guess" how the old signature looked<br>
like and try to replace it. Meaning:<br>
<br>
void foo() const;<br>
<br>
=> works (one space, then const)<br>
<br>
void foo()\tconst<br>
=> won't work and similar<br>
<br>
With return type it's even harder, since one does not now whether we have:<br>
<br>
returntype ClassName::methodName() {}<br>
<br>
returntype SomeNamespace::ClassName::methodName() {}<br>
<br>
returntype someTypeDef::ClassName::methodName() {}<br>
<br>
and so forth.<br>
<br>
The parameters at least know the range they replace (the Function context) and<br>
ignore the old text. For the other parts this is not possible. So what should<br>
we do here?<br>
<br>
1) get AST for document and replace on that, might be slow - advantage:<br>
completely safe to replace<br>
<br>
Since that's API/code wise easy to implement, I'm actually tempted to use that<br>
for now.<br>
<br>
2) only get the line of the signature to change and use regex to find ranges<br>
for DocumentChange, i.e.:<br>
<br>
^\s*\bOLDRETTYPE\b\s+(\w+)::FUNCNAME(.*)\s*(const)?\s*{?$<br>
<br>
might need to handle comments though. That would be "fast", but I don't know<br>
what the best way is to get the string for a line in a document, considering<br>
it might not yet be opened. Ideas? I could just create a KateDocument but that<br>
might do too much, do we have something else?<br>
<br>
Bye<br>
<font color="#888888">--<br>
Milian Wolff<br>
<a href="mailto:mail@milianw.de">mail@milianw.de</a><br>
<a href="http://milianw.de" target="_blank">http://milianw.de</a><br>
</font><br>--<br>
KDevelop-devel mailing list<br>
<a href="mailto:KDevelop-devel@kdevelop.org">KDevelop-devel@kdevelop.org</a><br>
<a href="https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel" target="_blank">https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel</a><br>
<br></blockquote></p>