public override IEnumerable <string> VisitPsiExpression(IPsiExpression psiExpressionParam, PsiFmtStageContext context)
 {
     if (context.RightChild is IChoiceTail)
     {
         return(new[] { "\r\n" });
     }
     return(new[] { " " });
 }
Example #2
0
        public override string VisitPsiExpression(IPsiExpression psiExpressionParam, FormattingStageContext context)
        {
            string parentIndent = GetParentIndent(context.Parent);

            if (context.RightChild is IChoiceTail)
            {
                return(parentIndent);
            }
            if (context.Parent is ParenExpression)
            {
                return(parentIndent + StandartIndent);
            }
            return(myIndentCache.GetNodeIndent(psiExpressionParam));
        }
        public override void VisitPsiExpression(IPsiExpression psiExpression, IHighlightingConsumer consumer)
        {
            ITreeNode         child = psiExpression.FirstChild;
            IList <ISequence> list  = new List <ISequence>();

            while (child != null)
            {
                if (child is ISequence)
                {
                    list.Add(child as ISequence);
                }
                if (child is IChoiceTail)
                {
                    list.Add((child as IChoiceTail).Sequence);
                }
                child = child.NextSibling;
            }

            if (list.Count > 1)
            {
                ISequence[] sequences  = list.ToArray();
                var         isRepeated = new bool[sequences.Count()];
                for (int i = 0; i < sequences.Count() - 1; ++i)
                {
                    if (!isRepeated[i])
                    {
                        ISequence sequence1 = sequences[i];
                        for (int j = i + 1; j < sequences.Count(); ++j)
                        {
                            ISequence sequence2 = sequences[j];
                            if (PsiTreeUtil.EqualsElements(sequence1, sequence2))
                            {
                                if (!isRepeated[i])
                                {
                                    consumer.AddHighlighting(new RepeatedChoiceWarning(sequence1), File);
                                    isRepeated[i] = true;
                                }
                                consumer.AddHighlighting(new RepeatedChoiceWarning(sequence2), File);
                                isRepeated[j] = true;
                            }
                        }
                    }
                }
            }
            base.VisitPsiExpression(psiExpression, consumer);
        }
    public override void VisitPsiExpression(IPsiExpression psiExpression, IHighlightingConsumer consumer)
    {
      ITreeNode child = psiExpression.FirstChild;
      IList<ISequence> list = new List<ISequence>();
      while (child != null)
      {
        if (child is ISequence)
        {
          list.Add(child as ISequence);
        }
        if (child is IChoiceTail)
        {
          list.Add((child as IChoiceTail).Sequence);
        }
        child = child.NextSibling;
      }

      if (list.Count > 1)
      {
        ISequence[] sequences = list.ToArray();
        var isRepeated = new bool[sequences.Count()];
        for (int i = 0 ; i < sequences.Count() - 1 ; ++i)
        {
          if (!isRepeated[i])
          {
            ISequence sequence1 = sequences[i];
            for (int j = i + 1 ; j < sequences.Count() ; ++j)
            {
              ISequence sequence2 = sequences[j];
              if (PsiTreeUtil.EqualsElements(sequence1, sequence2))
              {
                if (!isRepeated[i])
                {
                  consumer.AddHighlighting(new RepeatedChoiceWarning(sequence1), File);
                  isRepeated[i] = true;
                }
                consumer.AddHighlighting(new RepeatedChoiceWarning(sequence2), File);
                isRepeated[j] = true;
              }
            }
          }
        }
      }
      base.VisitPsiExpression(psiExpression, consumer);
    }