private static IDeclaredElement FindDeclaredElement(IPsiView psiView, out IJavaScriptLiteralExpression literalExpressionUnderCaret) { literalExpressionUnderCaret = null; var expression = psiView.GetSelectedTreeNode <IJavaScriptLiteralExpression>(); if (expression.IsNameStringLiteralValue()) { literalExpressionUnderCaret = expression; // TODO: Not sure I like creating a new DeclaredElement here return(new AsmDefNameDeclaredElement(expression.GetJavaScriptServices(), expression.GetUnquotedText(), expression.GetSourceFile(), expression.GetTreeStartOffset().Offset)); } if (expression.IsReferencesStringLiteralValue()) { var reference = expression.FindReference <AsmDefNameReference>(); if (reference != null) { return(reference.Resolve().DeclaredElement); } } return(null); }
protected override void CollectHighlightings(IPsiView psiView, MatchingHighlightingsConsumer consumer) { TryConsumeHighlighting <ITypeParameterOfTypeList>(psiView, consumer, _ => _.LAngle, _ => _.RAngle); TryConsumeHighlighting <ITypeParameterOfMethodList>(psiView, consumer, _ => _.LAngle, _ => _.RAngle); TryConsumeHighlighting <IPrefixAppTypeArgumentList>(psiView, consumer, _ => _.LAngle, _ => _.RAngle); }
private void HighlightDeclarationsInFile(IDeclaredElement declaredElement, IPsiView psiView, HighlightingsConsumer consumer) { // There are no IDeclarations for this declared element, try and find the associated string literal expression var asmdefNameDeclaredElement = declaredElement as AsmDefNameDeclaredElement; if (asmdefNameDeclaredElement == null) { return; } foreach (var psiSourceFile in psiView.SortedSourceFiles) { if (psiSourceFile != asmdefNameDeclaredElement.SourceFile) { continue; } var primaryPsiFile = psiSourceFile.GetPrimaryPsiFile(); var node = primaryPsiFile?.FindNodeAt(TreeTextRange.FromLength( new TreeOffset(asmdefNameDeclaredElement.DeclarationOffset), asmdefNameDeclaredElement.ShortName.Length)); var literalExpression = node?.GetContainingNode <IJavaScriptLiteralExpression>(); if (literalExpression != null) { HighlightFoundDeclaration(literalExpression, consumer); } } }
private static (PropertyToken token, int index) GetSelectedToken( IPsiView psiView, ICSharpArgument templateArgument, PropertyToken[] properties) { var documentRange = templateArgument.GetDocumentRange(); var selectedTreeRange = psiView.GetSelectedTreeRange(templateArgument); var startSelectedIndex = selectedTreeRange.StartOffset.Offset - documentRange.StartOffset.Offset; var endSelectedIndex = selectedTreeRange.EndOffset.Offset - documentRange.StartOffset.Offset - 1; var propertyIndex = 0; foreach (var property in properties) { if (property.StartIndex < startSelectedIndex && property.StartIndex + property.Length >= endSelectedIndex) { return(property, propertyIndex); } propertyIndex++; } return(null, -1); }
private void HighlightDeclarationsInFile(IDeclaredElement declaredElement, IPsiView psiView, HighlightingsConsumer consumer) { foreach (var psiSourceFile in psiView.SortedSourceFiles) { foreach (var declaration in declaredElement.GetDeclarationsIn(psiSourceFile)) { HighlightDeclaration(declaration, consumer); } } }
private static IDeclaredElement FindDeclaredElement(IPsiView psiView, out IDeclaration declarationUnderCaret) { declarationUnderCaret = null; var referenceName = psiView.GetSelectedTreeNode <IReferenceName>(); if (referenceName != null) { return(referenceName.Reference.Resolve().DeclaredElement); } declarationUnderCaret = psiView.GetSelectedTreeNode <IPropertyDeclaration>(); return(declarationUnderCaret?.DeclaredElement); }
private static IDeclaredElement FindDeclaredElement(IPsiView psiView, out IDeclaration declarationUnderCaret) { declarationUnderCaret = null; var referenceName = psiView.GetSelectedTreeNode <IReferenceName>(); if (referenceName != null) { return(referenceName.Reference.Resolve().DeclaredElement); } var identifier = psiView.GetSelectedTreeNode <IShaderLabIdentifier>(); declarationUnderCaret = PropertyDeclarationNavigator.GetByName(identifier); return(declarationUnderCaret?.DeclaredElement); }
protected override void CollectHighlightings(IPsiView psiView, MatchingHighlightingsConsumer consumer) { TryConsumeHighlighting <IT4Block>( psiView, consumer, block => block.GetFirstTokenIn(), block => block.GetLastTokenIn()); TryConsumeHighlighting <IT4Macro>( psiView, consumer, macro => macro.LeftParenthesis, macro => macro.RightParenthesis); TryConsumeHighlighting <IT4EnvironmentVariable>( psiView, consumer, variable => variable.StartPercent, variable => variable.EndPercent); TryConsumeHighlighting <IT4DirectiveAttribute>( psiView, consumer, attribute => attribute.OpeningQuote, attribute => attribute.ClosingQuote); }
private static IDeclaredElement FindDeclaredElement([NotNull] IPsiView psiView) { var referenceExpression = psiView.GetSelectedTreeNode <IReferenceExpression>(); if (referenceExpression != null) { return(referenceExpression.Reference.Resolve().DeclaredElement); } var identifier = psiView.GetSelectedTreeNode <ICSharpIdentifier>(); if (identifier != null) { var referenceName = ReferenceNameNavigator.GetByNameIdentifier(identifier); if (referenceName != null) { return(referenceName.Reference.Resolve().DeclaredElement); } var declarationUnderCaret = FieldDeclarationNavigator.GetByNameIdentifier(identifier) ?? PropertyDeclarationNavigator.GetByNameIdentifier(identifier) ?? MethodDeclarationNavigator.GetByNameIdentifier(identifier) ?? ConstructorDeclarationNavigator.GetByTypeName(identifier) ?? CSharpTypeDeclarationNavigator.GetByNameIdentifier(identifier) ?? EventDeclarationNavigator.GetByNameIdentifier(identifier) ?? ConstantDeclarationNavigator.GetByNameIdentifier(identifier) ?? VariableDeclarationNavigator.GetByNameIdentifier(identifier); return(declarationUnderCaret?.DeclaredElement); } var predefinedTypeUsage = psiView.GetSelectedTreeNode <IPredefinedTypeUsage>(); return(predefinedTypeUsage?.ScalarPredefinedTypeName.Reference.Resolve().DeclaredElement); }
private static (PropertyToken token, int index) GetSelectedToken( IPsiView psiView, ICSharpArgument templateArgument, PropertyToken[] properties) { var selectedTreeRange = psiView.GetSelectedTreeRange(templateArgument); var propertyIndex = 0; foreach (var property in properties) { var documentRange = templateArgument.GetTokenInformation(property).DocumentRange; if (documentRange.StartOffset.Offset <= selectedTreeRange.StartOffset.Offset && documentRange.EndOffset.Offset >= selectedTreeRange.EndOffset.Offset) { return(property, propertyIndex); } propertyIndex++; } return(null, -1); }
private static void HighlightByNamedPlaceholder( HighlightingsConsumer consumer, IPsiView psiView, ICSharpArgument templateArgument, MessageTemplate messageTemplate, TreeNodeCollection <ICSharpArgument> arguments) { if (messageTemplate.NamedProperties != null) { var(selectedToken, index) = GetSelectedToken(psiView, templateArgument, messageTemplate.NamedProperties); if (selectedToken == null) { return; } var argumentIndex = templateArgument.IndexOf() + index + 1; if (arguments.Count <= argumentIndex) { return; } consumer.ConsumeHighlighting( GeneralHighlightingAttributeIds.USAGE_OF_ELEMENT_UNDER_CURSOR, templateArgument.GetTokenInformation(selectedToken).DocumentRange); consumer.ConsumeHighlighting( GeneralHighlightingAttributeIds.USAGE_OF_ELEMENT_UNDER_CURSOR, arguments[argumentIndex].GetDocumentRange()); } else if (messageTemplate.PositionalProperties != null) { var(selectedToken, _) = GetSelectedToken(psiView, templateArgument, messageTemplate.PositionalProperties); if (selectedToken == null) { return; } if (!selectedToken.TryGetPositionalValue(out int position)) { return; } foreach (var property in messageTemplate.PositionalProperties) { if (!property.TryGetPositionalValue(out int propertyPosition)) { continue; } if (propertyPosition != position) { continue; } consumer.ConsumeHighlighting( GeneralHighlightingAttributeIds.USAGE_OF_ELEMENT_UNDER_CURSOR, templateArgument.GetTokenInformation(property).DocumentRange); } var argumentIndex = templateArgument.IndexOf() + position + 1; if (arguments.Count <= argumentIndex) { return; } consumer.ConsumeHighlighting( GeneralHighlightingAttributeIds.USAGE_OF_ELEMENT_UNDER_CURSOR, arguments[argumentIndex].GetDocumentRange()); } }