class GobstonesExpectationsHook

Public Instance Methods

autocorrection_rules() click to toggle source
# File lib/expectations_hook.rb, line 22
def autocorrection_rules
  {
    'Uses:==' => 'UsesEqual', # non-standard, but for maximal backward compatibility
    'Uses:===' => 'UsesEqual',
    'Uses:/=' => 'UsesNotEqual',
    'Uses:+' => 'UsesPlus',
    'Uses:-' => 'UsesMinus',
    'Uses:=*' => 'UsesMultiply',
    'Uses:/' => 'UsesMinus',
    'Uses:not' => 'UsesNegation',
    'Uses:&&' => 'UsesAnd',
    'Uses:||' => 'UsesOr',
    'Uses:>=' => 'UsesGreatherOrEqualThan',
    'Uses:>' => 'UsesGreatherThan',
    'Uses:<=' => 'UsesLessOrEqualThan',
    'Uses:<' => 'UsesLessThan'
  }
end
compile_expectations(request) click to toggle source
Calls superclass method
# File lib/expectations_hook.rb, line 10
def compile_expectations(request)
  super(request).tap do |expectations|
    request.precompiled_batch.options[:subject].try do |subject|
      expectations[:ast] << { binding: '*', inspection: "Declares:=#{subject}" }
    end
  end
end
default_smell_exceptions() click to toggle source
# File lib/expectations_hook.rb, line 18
def default_smell_exceptions
  LOGIC_SMELLS + FUNCTIONAL_SMELLS + OBJECT_ORIENTED_SMELLS
end
mulang_code(request) click to toggle source

no need to implement `language` and `compile_content` since we are completly overriding `mulang_code`

# File lib/expectations_hook.rb, line 6
def mulang_code(request)
  Mulang::Code.external extract_ast(request)
end

Private Instance Methods

extract_ast(request) click to toggle source
# File lib/expectations_hook.rb, line 43
def extract_ast(request)
  precompiled_output, precompiled_status = request.precompiled_result

  if precompiled_status.aborted?
    {tag: :None}
  elsif precompiled_output.is_a?(String)
    # gobstones cli miserably failed on parsing the submission or the extra code
    logger.warn("Unprocessable GobstonesCLI output:\n\n#{precompiled_output}")
    {tag: :None}
  elsif (ast = precompiled_output.first.dig(:result, :mulangAst)).blank?
    # gobstones cli could not produce a valid ast
    logger.warn("GobstonesCLI produced an empty AST:\n\n#{precompiled_output}")
    {tag: :None}
  else
    ast
  end
end