def METHOD_NAME(self, node: ASTVariable):
    vector_parameter = node.get_vector_parameter()
    if vector_parameter is not None:
        if isinstance(self._neuron.get_parent(node), ASTDeclaration):
            # node is being declared: size should be >= 1
            min_index = 1
        else:
            # node is being indexed; index should be >= 0
            min_index = 0
        # account for negative numbers as an index, which is an expression (e.g. "-42")
        if isinstance(vector_parameter, ASTExpression) and vector_parameter.is_unary_operator() and vector_parameter.get_unary_operator().is_unary_minus and vector_parameter.get_expression().is_numeric_literal():
            code, message = Messages.get_vector_parameter_wrong_size(node.get_complete_name() + "[" + str(vector_parameter) + "]", str(vector_parameter))
            Logger.log_message(error_position=node.get_source_position(), log_level=LoggingLevel.ERROR,
                               code=code, message=message)
            return
        # otherwise, ``vector_parameter`` is a SimpleExpression
        assert vector_parameter.is_variable() or vector_parameter.is_numeric_literal()
        vector_parameter_val = None
        if vector_parameter.is_numeric_literal():
            if not isinstance(vector_parameter.type, IntegerTypeSymbol):
                code, message = Messages.get_vector_parameter_wrong_type(node.get_complete_name() + "[" + str(vector_parameter) + "]")
                Logger.log_message(error_position=node.get_source_position(), log_level=LoggingLevel.ERROR,
                                   code=code, message=message)
                return
            vector_parameter_val = int(vector_parameter.get_numeric_literal())
        if vector_parameter.is_variable():
            symbol = vector_parameter.get_scope().resolve_to_symbol(vector_parameter.get_variable().get_complete_name(),
                                                                    SymbolKind.VARIABLE)
            if symbol is None or not isinstance(symbol.get_type_symbol(), IntegerTypeSymbol):
                code, message = Messages.get_vector_parameter_wrong_type(node.get_complete_name() + "[" + str(vector_parameter) + "]")
                Logger.log_message(error_position=node.get_source_position(), log_level=LoggingLevel.ERROR,
                                   code=code, message=message)
                return
            vector_parameter_val = int(str(symbol.get_declaring_expression()))
        if vector_parameter_val is not None and vector_parameter_val < min_index:
            code, message = Messages.get_vector_parameter_wrong_size(node.get_complete_name(),
                                                                     str(vector_parameter_val))
            Logger.log_message(error_position=node.get_source_position(), log_level=LoggingLevel.ERROR,
                               code=code, message=message)