Browse Source

Improved current member recognition.

newNRvisualizers
Mike Krüger 15 years ago
parent
commit
03ee478b96
  1. 15
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 24
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs

15
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -44,7 +44,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -44,7 +44,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
#region Additional input properties
public CSharpFormattingOptions FormattingPolicy { get; set; }
public string EolMarker { get; set; }
public string IndentString { get; set; }
#endregion
@ -1051,6 +1053,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1051,6 +1053,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
return true;
}
string GetLineIndent (int lineNr)
{
var line = document.GetLineByNumber (lineNr);
@ -1196,7 +1199,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1196,7 +1199,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
}
static string GetNameWithParamCount (IMember member)
{
var e = member as IMethod;
@ -1620,6 +1622,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1620,6 +1622,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
}
}
IEnumerable<ICompletionData> CreateCaseCompletionData (TextLocation location)
{
var unit = ParseStub ("a: break;");
@ -1809,7 +1812,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1809,7 +1812,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return Tuple.Create (tsvisitor.ParsedFile, expr, completionUnit);
}
Tuple<CSharpParsedFile, AstNode, CompilationUnit> GetNewExpressionAt (int offset)
{
var parser = new CSharpParser ();
@ -1974,8 +1976,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1974,8 +1976,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
{
var state = new CSharpResolver (ctx, System.Threading.CancellationToken.None);
state.CurrentMember = CSharpParsedFile.GetMember (location);
state.CurrentTypeDefinition = CSharpParsedFile.GetInnermostTypeDefinition (location);
state.CurrentMember = currentMember;
state.CurrentTypeDefinition = currentType;
state.CurrentUsingScope = CSharpParsedFile.GetUsingScope (location);
if (state.CurrentMember != null) {
var node = Unit.GetNodeAt (location);
@ -2052,25 +2054,20 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2052,25 +2054,20 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
#region Keywords
static string[] expressionLevelKeywords = new string [] { "as", "is", "else", "out", "ref", "null", "delegate", "default"};
static string[] primitiveTypesKeywords = new string [] { "void", "object", "bool", "byte", "sbyte", "char", "short", "int", "long", "ushort", "uint", "ulong", "float", "double", "decimal", "string"};
static string[] statementStartKeywords = new string [] { "base", "new", "sizeof", "this",
"true", "false", "typeof", "checked", "unchecked", "from", "break", "checked",
"unchecked", "const", "continue", "do", "finally", "fixed", "for", "foreach",
"goto", "if", "lock", "return", "stackalloc", "switch", "throw", "try", "unsafe",
"using", "while", "yield", "dynamic", "var" };
static string[] globalLevelKeywords = new string [] {
"namespace", "using", "extern", "public", "internal",
"class", "interface", "struct", "enum", "delegate",
"abstract", "sealed", "static", "unsafe", "partial"
};
static string[] accessorModifierKeywords = new string [] {
"public", "internal", "protected", "private"
};
static string[] typeLevelKeywords = new string [] {
"public", "internal", "protected", "private",
"class", "interface", "struct", "enum", "delegate",

24
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs

@ -44,14 +44,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -44,14 +44,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
protected IDocument document;
protected int offset;
protected TextLocation location;
protected ITypeDefinition currentType;
protected IMember currentMember;
#region Input properties
public ITypeResolveContext ctx { get; set; }
public CompilationUnit Unit { get; set; }
public CSharpParsedFile CSharpParsedFile { get; set; }
public IProjectContent ProjectContent { get; set; }
#endregion
@ -63,7 +65,17 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -63,7 +65,17 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
this.location = document.GetLocation (offset);
this.currentType = CSharpParsedFile.GetInnermostTypeDefinition (location);
this.currentMember = CSharpParsedFile.GetMember (location);
this.currentMember = null;
if (this.currentType != null) {
foreach (var member in currentType.Members) {
if (member.Region.Begin < location && (currentMember == null || currentMember.Region.Begin < member.Region.Begin))
currentMember = member;
}
}
var stack = GetBracketStack (GetMemberTextToCaret ().Item1);
if (stack.Count == 0)
currentMember = null;
}
#region Context helper methods
@ -160,7 +172,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -160,7 +172,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
#endregion
#region Basic parsing/resolving functions
protected void AppendMissingClosingBrackets (StringBuilder wrapper, string memberText, bool appendSemicolon)
Stack<Tuple<char, int>> GetBracketStack (string memberText)
{
var bracketStack = new Stack<Tuple<char, int>> ();
@ -211,6 +223,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -211,6 +223,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
break;
}
}
return bracketStack;
}
protected void AppendMissingClosingBrackets (StringBuilder wrapper, string memberText, bool appendSemicolon)
{
var bracketStack = GetBracketStack (memberText);
bool didAppendSemicolon = !appendSemicolon;
char lastBracket = '\0';

Loading…
Cancel
Save