コード例 #1
0
        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);
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 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);
         }
     }
 }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
 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);
 }
コード例 #9
0
        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());
            }
        }