class AdLint::Exam::CBuiltin::W0809

Public Class Methods

new(phase_ctxt) click to toggle source
Calls superclass method AdLint::Examination::new
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 19991
def initialize(phase_ctxt)
  super
  trav = phase_ctxt[:cc1_ast_traversal]
  trav.enter_function_declaration      += T(:check_function_name)
  trav.enter_variable_declaration      += T(:check_variable_name)
  trav.enter_variable_definition       += T(:check_variable_name)
  trav.enter_parameter_definition      += T(:check_variable_name)
  trav.enter_typedef_declaration       += T(:check_typedef_name)
  trav.enter_struct_type_declaration   += T(:check_tag_name)
  trav.enter_union_type_declaration    += T(:check_tag_name)
  trav.enter_enum_type_declaration     += T(:check_tag_name)
  trav.enter_enumerator                += T(:check_enumerator_name)
  trav.enter_kandr_function_definition += T(:enter_function)
  trav.enter_ansi_function_definition  += T(:enter_function)
  trav.leave_kandr_function_definition += T(:leave_function)
  trav.leave_ansi_function_definition  += T(:leave_function)
  @fun_def_level = 0
end

Private Instance Methods

check_enumerator_name(enum) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20039
def check_enumerator_name(enum)
  if enum.identifier
    case name = enum.identifier.value
    when /\A__/, /\A_[A-Z]/, /\A_/
      W(enum.location, name)
    end
  end
end
check_filelocal_object_name(name, dcl_or_def) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20068
def check_filelocal_object_name(name, dcl_or_def)
  if @fun_def_level == 0
    if sc_spec = dcl_or_def.storage_class_specifier
      if sc_spec.type == :STATIC
        W(dcl_or_def.location, name)
      end
    end
  end
end
check_function_name(fun_dcl) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20011
def check_function_name(fun_dcl)
  check_object_name(fun_dcl)
end
check_object_name(dcl_or_def) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20057
def check_object_name(dcl_or_def)
  if dcl_or_def.identifier
    case name = dcl_or_def.identifier.value
    when /\A__/, /\A_[A-Z]/
      W(dcl_or_def.location, name)
    when /\A_/
      check_filelocal_object_name(name, dcl_or_def)
    end
  end
end
check_tag_name(type_dcl) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20028
def check_tag_name(type_dcl)
  if type_dcl.identifier
    case name = type_dcl.identifier.value
    when /\A__adlint/
      # NOTE: To ignore AdLint internal tag names.
    when /\A__/, /\A_[A-Z]/, /\A_/
      W(type_dcl.location, name)
    end
  end
end
check_typedef_name(typedef_dcl) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20019
def check_typedef_name(typedef_dcl)
  if typedef_dcl.identifier
    case name = typedef_dcl.identifier.value
    when /\A__/, /\A_[A-Z]/, /\A_/
      W(typedef_dcl.location, name)
    end
  end
end
check_variable_name(var_dcl_or_def) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20015
def check_variable_name(var_dcl_or_def)
  check_object_name(var_dcl_or_def)
end
enter_function(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20048
def enter_function(node)
  check_object_name(node)
  @fun_def_level += 1
end
leave_function(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20053
def leave_function(node)
  @fun_def_level -= 1
end