Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@xamarin.com>2011-11-09 16:58:29 +0400
committerMike Krüger <mkrueger@xamarin.com>2011-11-09 16:58:29 +0400
commit767cd548c6d6dbe99ab20d5fffedb155a4476929 (patch)
tree51d7b712b6067adef7e6484a493a0edeb33dd9a3 /main/contrib
parent96d8d1edbbaf66f985d1d150e308499b3f0c5c0c (diff)
Fixed "Bug 1914 - [New Resolver] Annoying parameters tooltip behavior
when typing a string".
Diffstat (limited to 'main/contrib')
-rw-r--r--main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs94
1 files changed, 94 insertions, 0 deletions
diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs
index 493e5866d2..fdb57190a7 100644
--- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs
+++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs
@@ -226,6 +226,100 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
return false;
}*/
+
+ public int GetCurrentParameterIndex (int triggerOffset)
+ {
+ SetOffset (triggerOffset);
+ var text = GetMemberTextToCaret ();
+ var parameter = new Stack<int> ();
+
+ bool inSingleComment = false, inString = false, inVerbatimString = false, inChar = false, inMultiLineComment = false;
+
+ for (int i = 0; i < text.Item1.Length; i++) {
+ char ch = text.Item1 [i];
+ char nextCh = i + 1 < text.Item1.Length ? text.Item1 [i + 1] : '\0';
+
+ switch (ch) {
+ case '(':
+ if (inString || inChar || inVerbatimString || inSingleComment || inMultiLineComment)
+ break;
+ parameter.Push (0);
+ break;
+ case ')':
+ if (inString || inChar || inVerbatimString || inSingleComment || inMultiLineComment)
+ break;
+ if (parameter.Count > 0)
+ parameter.Pop ();
+ break;
+ case ',':
+ if (inString || inChar || inVerbatimString || inSingleComment || inMultiLineComment)
+ break;
+ if (parameter.Count > 0)
+ parameter.Push (parameter.Pop () + 1);
+ break;
+ case '/':
+ if (inString || inChar || inVerbatimString)
+ break;
+ if (nextCh == '/') {
+ i++;
+ inSingleComment = true;
+ }
+ if (nextCh == '*')
+ inMultiLineComment = true;
+ break;
+ case '*':
+ if (inString || inChar || inVerbatimString || inSingleComment)
+ break;
+ if (nextCh == '/') {
+ i++;
+ inMultiLineComment = false;
+ }
+ break;
+ case '@':
+ if (inString || inChar || inVerbatimString || inSingleComment || inMultiLineComment)
+ break;
+ if (nextCh == '"') {
+ i++;
+ inVerbatimString = true;
+ }
+ break;
+ case '\n':
+ case '\r':
+ inSingleComment = false;
+ inString = false;
+ inChar = false;
+ break;
+ case '\\':
+ if (inString || inChar)
+ i++;
+ break;
+ case '"':
+ if (inSingleComment || inMultiLineComment || inChar)
+ break;
+ if (inVerbatimString) {
+ if (nextCh == '"') {
+ i++;
+ break;
+ }
+ inVerbatimString = false;
+ break;
+ }
+ inString = !inString;
+ break;
+ case '\'':
+ if (inSingleComment || inMultiLineComment || inString || inVerbatimString)
+ break;
+ inChar = !inChar;
+ break;
+ }
+ }
+ if (parameter.Count == 0)
+ return -1;
+ if (text.Item1.EndsWith ("("))
+ return 1;
+ return parameter.Pop () + 1;
+ }
+
}
}