|
|
|
|
@ -864,59 +864,65 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
@@ -864,59 +864,65 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
|
|
|
|
|
return wrapper.Result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AddContextCompletion (CompletionDataWrapper wrapper, CSharpResolver state, AstNode node) |
|
|
|
|
void AddContextCompletion(CompletionDataWrapper wrapper, CSharpResolver state, AstNode node) |
|
|
|
|
{ |
|
|
|
|
if (state != null && !(node is AstType)) { |
|
|
|
|
foreach (var variable in state.LocalVariables) { |
|
|
|
|
if (variable.Region.IsInside (location.Line, location.Column - 1)) |
|
|
|
|
if (variable.Region.IsInside(location.Line, location.Column - 1)) { |
|
|
|
|
continue; |
|
|
|
|
wrapper.AddVariable (variable); |
|
|
|
|
} |
|
|
|
|
wrapper.AddVariable(variable); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (currentMember is IUnresolvedParameterizedMember && !(node is AstType)) { |
|
|
|
|
var param = (IParameterizedMember)currentMember.CreateResolved (ctx); |
|
|
|
|
var param = (IParameterizedMember)currentMember.CreateResolved(ctx); |
|
|
|
|
foreach (var p in param.Parameters) { |
|
|
|
|
wrapper.AddVariable (p); |
|
|
|
|
wrapper.AddVariable(p); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (currentMember is IUnresolvedMethod) { |
|
|
|
|
var method = (IUnresolvedMethod)currentMember; |
|
|
|
|
foreach (var p in method.TypeParameters) { |
|
|
|
|
wrapper.AddTypeParameter (p); |
|
|
|
|
wrapper.AddTypeParameter(p); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Predicate<IType> typePred = null; |
|
|
|
|
if (IsAttributeContext (node)) { |
|
|
|
|
var attribute = Compilation.FindType (KnownTypeCode.Attribute); |
|
|
|
|
if (IsAttributeContext(node)) { |
|
|
|
|
var attribute = Compilation.FindType(KnownTypeCode.Attribute); |
|
|
|
|
typePred = t => { |
|
|
|
|
return t.GetAllBaseTypeDefinitions ().Any (bt => bt.Equals (attribute)); |
|
|
|
|
return t.GetAllBaseTypeDefinitions().Any(bt => bt.Equals(attribute)); |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
AddTypesAndNamespaces (wrapper, state, node, typePred); |
|
|
|
|
AddTypesAndNamespaces(wrapper, state, node, typePred); |
|
|
|
|
|
|
|
|
|
wrapper.Result.Add (factory.CreateLiteralCompletionData ("global")); |
|
|
|
|
wrapper.Result.Add(factory.CreateLiteralCompletionData("global")); |
|
|
|
|
|
|
|
|
|
if (!(node is AstType)) { |
|
|
|
|
if (currentMember != null) { |
|
|
|
|
AddKeywords (wrapper, statementStartKeywords); |
|
|
|
|
AddKeywords (wrapper, expressionLevelKeywords); |
|
|
|
|
AddKeywords(wrapper, statementStartKeywords); |
|
|
|
|
AddKeywords(wrapper, expressionLevelKeywords); |
|
|
|
|
} else if (currentType != null) { |
|
|
|
|
AddKeywords (wrapper, typeLevelKeywords); |
|
|
|
|
AddKeywords(wrapper, typeLevelKeywords); |
|
|
|
|
} else { |
|
|
|
|
AddKeywords (wrapper, globalLevelKeywords); |
|
|
|
|
AddKeywords(wrapper, globalLevelKeywords); |
|
|
|
|
} |
|
|
|
|
var prop = currentMember as IUnresolvedProperty; |
|
|
|
|
if (prop != null && prop.Setter != null && prop.Setter.Region.IsInside (location)) |
|
|
|
|
wrapper.AddCustom ("value"); |
|
|
|
|
if (currentMember is IUnresolvedEvent) |
|
|
|
|
wrapper.AddCustom ("value"); |
|
|
|
|
if (prop != null && prop.Setter != null && prop.Setter.Region.IsInside(location)) { |
|
|
|
|
wrapper.AddCustom("value"); |
|
|
|
|
} |
|
|
|
|
if (currentMember is IUnresolvedEvent) { |
|
|
|
|
wrapper.AddCustom("value"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (IsInSwitchContext (node)) { |
|
|
|
|
wrapper.AddCustom ("case"); |
|
|
|
|
if (IsInSwitchContext(node)) { |
|
|
|
|
wrapper.AddCustom("case"); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if (((AstType)node).Parent is ParameterDeclaration) |
|
|
|
|
AddKeywords(wrapper, parameterTypePredecessorKeywords); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AddKeywords (wrapper, primitiveTypesKeywords); |
|
|
|
|
@ -2522,6 +2528,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
@@ -2522,6 +2528,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
|
|
|
|
|
"override", "readonly", "virtual", "volatile" |
|
|
|
|
}; |
|
|
|
|
static string[] linqKeywords = new string[] { "from", "where", "select", "group", "into", "orderby", "join", "let", "in", "on", "equals", "by", "ascending", "descending" }; |
|
|
|
|
static string[] parameterTypePredecessorKeywords = new string[] { "out", "ref", "params" }; |
|
|
|
|
#endregion
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|