class Bindgen::Processor::SanityCheck

Overview

Does sanity-checks on the graph. If any check fails, a message written to STDERR and the process is exited.

Checks are as follows:

Defined in:

bindgen/processor/sanity_check.cr

Constant Summary

CAMEL_CASE_RX = /^[A-Z_][A-Za-z0-9_]*$/

Regular expression for a camel-cased symbol

CONSTANT_RX = /^[A-Z_][A-Z0-9_]*$/

Regular expression for a CONSTANT

ENUM_FLAG_ALL = "All"

The all-flags constant in a flag-enum

ENUM_FLAG_NONE = "None"

The no-flags constant in a flag-enum

ENUMERABLE_RX = /^Enumerable(?:\([A-Za-z0-9_():*]*\))?$/

Regular expression for a Crystal Enumerable typename

TODO support other Crystal stdlib types (which might not correspond to any C++ type at all)

METHOD_NAME_RX = /^[a-z_][A-Za-z0-9_]*[?!=]?$/

Regular expression describing a method name

OPERATOR_METHOD_NAME_RX = /^([\+\-\*\/\%\&\|\^\>\<\~]|\<\<|\>\>|[\!\=\<\>]=|=[\<\>]|\[\])$/

Regular expression describing a operator method name

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from class Bindgen::Processor::Base

process(graph : Graph::Container, doc : Parser::Document) process

Constructor methods inherited from class Bindgen::Processor::Base

new(config : Configuration, db : TypeDatabase) new

Instance methods inherited from module Bindgen::Graph::Visitor

visit_alias(alias_name) visit_alias, visit_children(container : Container) visit_children, visit_class(klass) visit_class, visit_constant(constant) visit_constant, visit_enum(enumeration) visit_enum, visit_library(library) visit_library, visit_method(method) visit_method, visit_namespace(ns) visit_namespace, visit_node(node : Node) visit_node, visit_node?(node : Node) visit_node?, visit_platform_specific(specific) visit_platform_specific, visit_struct(structure) visit_struct, visit_union(structure) visit_union

Constructor Detail

def self.new(*_args) #

[View source]

Class Method Detail

def self.logger #

Does sanity-checks on the graph. If any check fails, a message written to STDERR and the process is exited.

Checks are as follows:

  • Name of enums, libs, structures, classes, modules and aliases are valid
  • Name of methods are valid
  • Enumerations have at least one constant
  • Enumeration constants are correctly named
  • Flag-enumerations don't have All nor None constants
  • Crystal method overloads are unambiguous
  • Method arguments and result types are reachable
  • Variadic methods are directly bound
  • Alias targets are reachable
  • Class base-classes are reachable

Instance Method Detail

def logger #

Does sanity-checks on the graph. If any check fails, a message written to STDERR and the process is exited.

Checks are as follows:

  • Name of enums, libs, structures, classes, modules and aliases are valid
  • Name of methods are valid
  • Enumerations have at least one constant
  • Enumeration constants are correctly named
  • Flag-enumerations don't have All nor None constants
  • Crystal method overloads are unambiguous
  • Method arguments and result types are reachable
  • Variadic methods are directly bound
  • Alias targets are reachable
  • Class base-classes are reachable

def process(*_args) #

[View source]
def visit_class(klass) #

Check for ambiguous Crystal overloads


[View source]
def visit_enum(enumeration) #

Check enumeration constants


[View source]
def visit_library(library) #

Temporarily switch the platform.


[View source]
def visit_node(node) #

Check for correct naming of nodes.


[View source]
def visit_platform_specific(specific) #

Only visit non-C++ specifics


[View source]