| File: Completion\KeywordRecommenders\Declarations\OverloadableOperatorRecommender.vb | Web Access |
| Project: src\roslyn\src\Features\VisualBasic\Portable\Microsoft.CodeAnalysis.VisualBasic.Features.vbproj (Microsoft.CodeAnalysis.VisualBasic.Features) |
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. Imports System.Collections.Immutable Imports System.Threading Imports Microsoft.CodeAnalysis.Completion.Providers Imports Microsoft.CodeAnalysis.VisualBasic.Extensions.ContextQuery Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.KeywordRecommenders.Declarations ''' <summary> ''' Recommends the various list of operators you can overload after the "Operator" keyword ''' </summary> Friend Class OverloadableOperatorRecommender Inherits AbstractKeywordRecommender Protected Overrides Function RecommendKeywords(context As VisualBasicSyntaxContext, cancellationToken As CancellationToken) As ImmutableArray(Of RecommendedKeyword) If context.FollowsEndOfStatement Then Return ImmutableArray(Of RecommendedKeyword).Empty End If Dim targetToken = context.TargetToken If Not targetToken.IsKind(SyntaxKind.OperatorKeyword) OrElse Not targetToken.Parent.IsKind(SyntaxKind.OperatorStatement) Then Return ImmutableArray(Of RecommendedKeyword).Empty End If Dim modifierFacts = context.ModifierCollectionFacts ' If we have a Widening or Narrowing declaration, then we must be a CType operator If modifierFacts.NarrowingOrWideningKeyword.Kind <> SyntaxKind.None Then Return ImmutableArray.Create(New RecommendedKeyword("CType", VBFeaturesResources.Returns_the_result_of_explicitly_converting_an_expression_to_a_specified_data_type_object_structure_class_or_interface_CType_Object_As_Expression_Object_As_Type_As_Type)) Else ' We could just be a normal name, so we list all possible options here. Dev10 allows you to type ' "Operator Narrowing", so we also list the Narrowing/Widening options as well. ' TODO: fix parser to actually deal with such stupidities like "Operator Narrowing" Return {"+", "-", "IsFalse", "IsTrue", "Not", "*", "/", "\", "&", "^", ">>", "<<", "=", "<>", ">", ">=", "<", "<=", "And", "Like", "Mod", "Or", "Xor", "Narrowing", "Widening"}.Select(Function(s) New RecommendedKeyword(s, GetToolTipForKeyword(s))).ToImmutableArray() End If End Function Private Shared Function GetToolTipForKeyword([operator] As String) As String Select Case [operator] Case "+" Return VBFeaturesResources.Returns_the_sum_of_two_numbers_or_the_positive_value_of_a_numeric_expression Case "-" Return VBFeaturesResources.Returns_the_difference_between_two_numeric_expressions_or_the_negative_value_of_a_numeric_expression Case "IsFalse" Return VBFeaturesResources.Determines_whether_an_expression_is_false_If_instances_of_any_class_or_structure_will_be_used_in_an_OrElse_clause_you_must_define_IsFalse_on_that_class_or_structure Case "IsTrue" Return VBFeaturesResources.Determines_whether_an_expression_is_true_If_instances_of_any_class_or_structure_will_be_used_in_an_OrElse_clause_you_must_define_IsTrue_on_that_class_or_structure Case "Not" Return VBFeaturesResources.Performs_logical_negation_on_a_Boolean_expression_or_bitwise_negation_on_a_numeric_expression_result_Not_expression Case "*" Return VBFeaturesResources.Multiplies_two_numbers_and_returns_the_product Case "/" Return VBFeaturesResources.Divides_two_numbers_and_returns_a_floating_point_result Case "\" Return VBFeaturesResources.Divides_two_numbers_and_returns_an_integer_result Case "&" Return VBFeaturesResources.Generates_a_string_concatenation_of_two_expressions Case "^" Return VBFeaturesResources.Raises_a_number_to_the_power_of_another_number Case ">>" Return VBFeaturesResources.Performs_an_arithmetic_right_shift_on_a_bit_pattern Case "<<" Return VBFeaturesResources.Performs_an_arithmetic_left_shift_on_a_bit_pattern Case "=" Return VBFeaturesResources.Compares_two_expressions_and_returns_True_if_they_are_equal_Otherwise_returns_False Case "<>" Return VBFeaturesResources.Compares_two_expressions_and_returns_True_if_they_are_not_equal_Otherwise_returns_False Case ">" Return VBFeaturesResources.Compares_two_expressions_and_returns_True_if_the_first_is_greater_than_the_second_Otherwise_returns_False Case ">=" Return VBFeaturesResources.Compares_two_expressions_and_returns_True_if_the_first_is_greater_than_or_equal_to_the_second_Otherwise_returns_False Case "<" Return VBFeaturesResources.Compares_two_expressions_and_returns_True_if_the_first_is_less_than_the_second_Otherwise_returns_False Case "<=" Return VBFeaturesResources.Compares_two_expressions_and_returns_True_if_the_first_is_less_than_or_equal_to_the_second_Otherwise_returns_False Case "And" Return VBFeaturesResources.Performs_a_logical_conjunction_on_two_Boolean_expressions_or_a_bitwise_conjunction_on_two_numeric_expressions_For_Boolean_expressions_returns_True_if_both_operands_evaluate_to_True_Both_expressions_are_always_evaluated_result_expression1_And_expression2 Case "Like" Return VBFeaturesResources.Compares_a_string_against_a_pattern_Wildcards_available_include_to_match_1_character_and_to_match_0_or_more_characters_result_string_Like_pattern Case "Mod" Return VBFeaturesResources.Divides_two_numbers_and_returns_only_the_remainder_number1_Mod_number2 Case "Or" Return VBFeaturesResources.Performs_an_inclusive_logical_disjunction_on_two_Boolean_expressions_or_a_bitwise_disjunction_on_two_numeric_expressions_For_Boolean_expressions_returns_True_if_at_least_one_operand_evaluates_to_True_Both_expressions_are_always_evaluated_result_expression1_Or_expression2 Case "Xor" Return VBFeaturesResources.Performs_a_logical_exclusion_on_two_Boolean_expressions_or_a_bitwise_exclusion_on_two_numeric_expressions_For_Boolean_expressions_returns_True_if_exactly_one_of_the_expressions_evaluates_to_True_Both_expressions_are_always_evaluated_result_expression1_Xor_expression2 Case "Narrowing" Return VBFeaturesResources.Indicates_that_a_conversion_operator_CType_converts_a_class_or_structure_to_a_type_that_might_not_be_able_to_hold_some_of_the_possible_values_of_the_original_class_or_structure Case "Widening" Return VBFeaturesResources.Indicates_that_a_conversion_operator_CType_converts_a_class_or_structure_to_a_type_that_can_hold_all_possible_values_of_the_original_class_or_structure Case Else Return String.Empty End Select End Function End Class End Namespace