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); }
protected override void TryHighlightToRight(MatchingHighlightingsConsumer consumer, ITokenNode selectedToken, TreeOffset treeOffset) { var selectedTokenType = selectedToken.GetTokenType(); if (IsLeftBracket(selectedTokenType)) { ITokenNode matchedNode; if (FindMatchingRightBracket(selectedToken, out matchedNode)) { var singleChar = IsSingleCharToken(matchedNode); consumer.ConsumeMatchingBracesHighlighting(selectedToken.GetDocumentRange(), matchedNode.GetDocumentRange(), singleChar); } else { consumer.ConsumeHighlighting(HighlightingAttributeIds.UNMATCHED_BRACE, selectedToken.GetDocumentStartOffset().ExtendRight(1)); if (matchedNode != null) { consumer.ConsumeHighlighting(HighlightingAttributeIds.UNMATCHED_BRACE, matchedNode.GetDocumentEndOffset().ExtendLeft(1)); } } } else if (selectedTokenType == ShaderLabTokenType.STRING_LITERAL) { if (treeOffset == selectedToken.GetTreeTextRange().StartOffset) { consumer.ConsumeMatchingBracesHighlighting( selectedToken.GetDocumentStartOffset().ExtendRight(1), selectedToken.GetDocumentEndOffset().ExtendLeft(1)); } } }
protected override void TryHighlightToLeft(MatchingHighlightingsConsumer consumer, ITokenNode selectedToken, TreeOffset treeOffset) { TokenNodeType tokenType = selectedToken.GetTokenType(); if (this.IsRightBracket(tokenType)) { ITokenNode matchedToken; if (this.FindMatchingLeftBracket(selectedToken, out matchedToken)) { consumer.ConsumeMatchingBracesHighlighting(matchedToken.GetDocumentRange(), selectedToken.GetDocumentRange()); this.myLBraceDocumentRangeForIbh = matchedToken.GetDocumentRange(); this.myRBraceDocumentRangeForIbh = selectedToken.GetDocumentRange(); this.myHintTextGetter = textControl => this.GetHintText(textControl, matchedToken); } else { consumer.ConsumeHighlighting( "ReSharper Unmatched Brace", selectedToken.GetDocumentRange().EndOffsetRange().ExtendLeft(1)); if (matchedToken == null) { return; } consumer.ConsumeHighlighting( "ReSharper Unmatched Brace", matchedToken.GetDocumentRange().StartOffsetRange().ExtendRight(1)); } } else { if (tokenType != NTriplesTokenType.STRING_LITERAL) { return; } if (selectedToken.GetText()[0] == 64) { if (!(treeOffset == selectedToken.GetTreeTextRange().EndOffset)) { return; } consumer.ConsumeMatchingBracesHighlighting( selectedToken.GetDocumentRange().StartOffsetRange().ExtendRight(1).Shift(1), selectedToken.GetDocumentRange().EndOffsetRange().ExtendLeft(1)); } else { if (treeOffset != selectedToken.GetTreeTextRange().EndOffset) { return; } consumer.ConsumeMatchingBracesHighlighting( selectedToken.GetDocumentRange().StartOffsetRange().ExtendRight(1), selectedToken.GetDocumentRange().EndOffsetRange().ExtendLeft(1)); } } }
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); }
protected override void TryHighlightToRight(MatchingHighlightingsConsumer consumer, ITokenNode selectedToken, TreeOffset treeOffset) { TokenNodeType tokenType = selectedToken.GetTokenType(); if (this.IsLeftBracket(tokenType)) { ITokenNode matchedToken; if (this.FindMatchingRightBracket(selectedToken, out matchedToken)) { consumer.ConsumeMatchingBracesHighlighting(selectedToken.GetDocumentRange(), matchedToken.GetDocumentRange()); } else { consumer.ConsumeHighlighting( "ReSharper Unmatched Brace", selectedToken.GetDocumentRange().StartOffsetRange().ExtendRight(1)); if (matchedToken == null) { return; } consumer.ConsumeHighlighting( "ReSharper Unmatched Brace", matchedToken.GetDocumentRange().EndOffsetRange().ExtendLeft(1)); } } else { if (tokenType != NTriplesTokenType.STRING_LITERAL) { return; } if (selectedToken.GetText()[0] == 64) { if (treeOffset != selectedToken.GetTreeTextRange().StartOffset.Shift(1)) { return; } consumer.ConsumeMatchingBracesHighlighting( selectedToken.GetDocumentRange().StartOffsetRange().ExtendRight(1).Shift(1), selectedToken.GetDocumentRange().EndOffsetRange().ExtendLeft(1)); } else { if (treeOffset != selectedToken.GetTreeTextRange().StartOffset) { return; } consumer.ConsumeMatchingBracesHighlighting( selectedToken.GetDocumentRange().StartOffsetRange().ExtendRight(1), selectedToken.GetDocumentRange().EndOffsetRange().ExtendLeft(1)); } } }
// We have left brace. We'll find all right braces. // '[caret]LBRACE' protected override void TryHighlightToRight(MatchingHighlightingsConsumer consumer, ITokenNode selectedToken, TreeOffset treeOffset) { if (selectedToken.GetTokenType() != CSharpTokenType.STRING_LITERAL) { return; } if (ExistingTreeNodes.ExistingTrees.Count == 0) { return; } DocumentRange lBraceRange = myProvider.DocumentCaret.ExtendRight(1); ITreeNode node = GetNodeFromRange(lBraceRange); string lang = GetLanguageFromNode(node); if (String.IsNullOrEmpty(lang)) { return; } string lBrother = node.UserData.GetData(Constants.YcTokenName); string rBrother = LanguageHelper.GetBrother(lang, lBrother, Brother.Right); if (String.IsNullOrEmpty(rBrother)) { return; } int leftNumber = Int32.Parse(node.UserData.GetData(Constants.YcTokNumber)); int rightNumber = LanguageHelper.GetNumberFromYcName(lang, rBrother); var helper = Helper.ReSharperHelper <DocumentRange, ITreeNode> .Instance; IEnumerable <DocumentRange> ranges = helper.GetPairedRanges(lang, leftNumber, rightNumber, lBraceRange, true); foreach (DocumentRange range in ranges) { MatchingBracesContextHighlightersUtil.ConsumeMatchingBracesHighlighting(consumer, lBraceRange, range); } /* * need for measurement * Console.WriteLine(); * Stopwatch timer = new Stopwatch(); * timer.Start(); * List<ITreeNode> forest = Helper.ReSharperHelper<DocumentRange, ITreeNode>.Instance.GetForestWithToken(lang, lBraceRange); * * var lBraceTextRange = new TreeTextRange(treeOffset, 1); * * var rightRanges = new List<DocumentRange>(); * * foreach (ITreeNode tree in forest) * { * var lbraceNode = tree.FindNodeAt(lBraceTextRange); * //if (lbraceNode == null) * ////in general, this should not be. But while such a situation occurs * // continue; * var rBraceNode = lbraceNode.NextSibling; * while (rBraceNode != null * && rBraceNode.UserData.GetData(Constants.YcTokenName) != rBrother) * { * var text = rBraceNode.UserData.GetData(Constants.YcTokenName); * if (string.IsNullOrEmpty(text)) * Console.WriteLine(); * rBraceNode = rBraceNode.NextSibling; * } * if (rBraceNode != null) * rightRanges.Add(rBraceNode.GetNavigationRange()); * } * timer.Stop(); * measure.Add(timer.Elapsed); * if (measure.Count == 10) * { * using (var str = new StreamWriter(String.Format(newName, measure.Count))) * { * foreach (TimeSpan span in measure) * { * str.WriteLine(span); * } * } * } * * foreach (DocumentRange range in rightRanges) * { * MatchingBracesContextHighlightersUtil.ConsumeMatchingBracesHighlighting(consumer, lBraceRange, range); * } */ }
// We have right brace. We'll find all left braces. // 'RBRACE[caret]' protected override void TryHighlightToLeft(MatchingHighlightingsConsumer consumer, ITokenNode selectedToken, TreeOffset treeOffset) { if (selectedToken.GetTokenType() != CSharpTokenType.STRING_LITERAL) { return; } if (ExistingTreeNodes.ExistingTrees.Count == 0) { return; } DocumentRange rBraceRange = myProvider.DocumentCaret.ExtendLeft(1); ITreeNode node = GetNodeFromRange(rBraceRange); string lang = GetLanguageFromNode(node); if (String.IsNullOrEmpty(lang)) { return; } string rBrother = node.UserData.GetData(Constants.YcTokenName); string lbrother = LanguageHelper.GetBrother(lang, rBrother, Brother.Left); if (String.IsNullOrEmpty(lbrother)) { return; } int leftNumber = LanguageHelper.GetNumberFromYcName(lang, lbrother); int rightNumber = Int32.Parse(node.UserData.GetData(Constants.YcTokNumber)); var helper = Helper.ReSharperHelper <DocumentRange, ITreeNode> .Instance; IEnumerable <DocumentRange> ranges = helper.GetPairedRanges(lang, leftNumber, rightNumber, rBraceRange, false); foreach (DocumentRange range in ranges) { MatchingBracesContextHighlightersUtil.ConsumeMatchingBracesHighlighting(consumer, range, rBraceRange); } /* * need for measurement * List<ITreeNode> forest = Helper.ReSharperHelper<DocumentRange, ITreeNode>.Instance.GetForestWithToken(lang, rBraceRange); * * var lBraceTextRange = new TreeTextRange(treeOffset.Shift(-1), 1); * * var leftRanges = new List<DocumentRange>(); * * foreach (ITreeNode tree in forest) * { * var rBraceNode = tree.FindNodeAt(lBraceTextRange); * //if (rBraceNode == null) * // //in general, this should not be. But while such a situation occurs * // continue; * * var lbraceNode = rBraceNode.PrevSibling; * while (lbraceNode != null * && lbraceNode.UserData.GetData(Constants.YcTokenName) != lbrother) * { * lbraceNode = lbraceNode.PrevSibling; * } * if (lbraceNode != null) * leftRanges.Add(lbraceNode.GetNavigationRange()); * } * * foreach (DocumentRange range in leftRanges) * { * MatchingBracesContextHighlightersUtil.ConsumeMatchingBracesHighlighting(consumer, range, rBraceRange); * } */ }
// We have left brace. We'll find all right braces. // '[caret]LBRACE' protected override void TryHighlightToRight(MatchingHighlightingsConsumer consumer, ITokenNode selectedToken, TreeOffset treeOffset) { if (selectedToken.GetTokenType() != CSharpTokenType.STRING_LITERAL) return; if (ExistingTreeNodes.ExistingTrees.Count == 0) return; DocumentRange lBraceRange = myProvider.DocumentCaret.ExtendRight(1); ITreeNode node = GetNodeFromRange(lBraceRange); string lang = GetLanguageFromNode(node); if (String.IsNullOrEmpty(lang)) return; string lBrother = node.UserData.GetData(Constants.YcTokenName); string rBrother = LanguageHelper.GetBrother(lang, lBrother, Brother.Right); if (String.IsNullOrEmpty(rBrother)) return; int leftNumber = Int32.Parse(node.UserData.GetData(Constants.YcTokNumber)); int rightNumber = LanguageHelper.GetNumberFromYcName(lang, rBrother); var helper = Helper.ReSharperHelper<DocumentRange, ITreeNode>.Instance; IEnumerable<DocumentRange> ranges = helper.GetPairedRanges(lang, leftNumber, rightNumber, lBraceRange, true); foreach (DocumentRange range in ranges) { MatchingBracesContextHighlightersUtil.ConsumeMatchingBracesHighlighting(consumer, lBraceRange, range); } /* * need for measurement Console.WriteLine(); Stopwatch timer = new Stopwatch(); timer.Start(); List<ITreeNode> forest = Helper.ReSharperHelper<DocumentRange, ITreeNode>.Instance.GetForestWithToken(lang, lBraceRange); var lBraceTextRange = new TreeTextRange(treeOffset, 1); var rightRanges = new List<DocumentRange>(); foreach (ITreeNode tree in forest) { var lbraceNode = tree.FindNodeAt(lBraceTextRange); //if (lbraceNode == null) ////in general, this should not be. But while such a situation occurs // continue; var rBraceNode = lbraceNode.NextSibling; while (rBraceNode != null && rBraceNode.UserData.GetData(Constants.YcTokenName) != rBrother) { var text = rBraceNode.UserData.GetData(Constants.YcTokenName); if (string.IsNullOrEmpty(text)) Console.WriteLine(); rBraceNode = rBraceNode.NextSibling; } if (rBraceNode != null) rightRanges.Add(rBraceNode.GetNavigationRange()); } timer.Stop(); measure.Add(timer.Elapsed); if (measure.Count == 10) { using (var str = new StreamWriter(String.Format(newName, measure.Count))) { foreach (TimeSpan span in measure) { str.WriteLine(span); } } } foreach (DocumentRange range in rightRanges) { MatchingBracesContextHighlightersUtil.ConsumeMatchingBracesHighlighting(consumer, lBraceRange, range); } */ }
// We have right brace. We'll find all left braces. // 'RBRACE[caret]' protected override void TryHighlightToLeft(MatchingHighlightingsConsumer consumer, ITokenNode selectedToken, TreeOffset treeOffset) { if (selectedToken.GetTokenType() != CSharpTokenType.STRING_LITERAL) return; if (ExistingTreeNodes.ExistingTrees.Count == 0) return; DocumentRange rBraceRange = myProvider.DocumentCaret.ExtendLeft(1); ITreeNode node = GetNodeFromRange(rBraceRange); string lang = GetLanguageFromNode(node); if (String.IsNullOrEmpty(lang)) return; string rBrother = node.UserData.GetData(Constants.YcTokenName); string lbrother = LanguageHelper.GetBrother(lang, rBrother, Brother.Left); if (String.IsNullOrEmpty(lbrother)) return; int leftNumber = LanguageHelper.GetNumberFromYcName(lang, lbrother); int rightNumber = Int32.Parse(node.UserData.GetData(Constants.YcTokNumber)); var helper = Helper.ReSharperHelper<DocumentRange, ITreeNode>.Instance; IEnumerable<DocumentRange> ranges = helper.GetPairedRanges(lang, leftNumber, rightNumber, rBraceRange, false); foreach (DocumentRange range in ranges) { MatchingBracesContextHighlightersUtil.ConsumeMatchingBracesHighlighting(consumer, range, rBraceRange); } /* * need for measurement List<ITreeNode> forest = Helper.ReSharperHelper<DocumentRange, ITreeNode>.Instance.GetForestWithToken(lang, rBraceRange); var lBraceTextRange = new TreeTextRange(treeOffset.Shift(-1), 1); var leftRanges = new List<DocumentRange>(); foreach (ITreeNode tree in forest) { var rBraceNode = tree.FindNodeAt(lBraceTextRange); //if (rBraceNode == null) // //in general, this should not be. But while such a situation occurs // continue; var lbraceNode = rBraceNode.PrevSibling; while (lbraceNode != null && lbraceNode.UserData.GetData(Constants.YcTokenName) != lbrother) { lbraceNode = lbraceNode.PrevSibling; } if (lbraceNode != null) leftRanges.Add(lbraceNode.GetNavigationRange()); } foreach (DocumentRange range in leftRanges) { MatchingBracesContextHighlightersUtil.ConsumeMatchingBracesHighlighting(consumer, range, rBraceRange); } */ }