class Syntaxer::Reader::DSLReader

Attributes

ignored_folders[R]
rules[R]

Public Class Methods

build(skip_default_rules = false, default_rules_file = SYNTAXER_RULES_FILE) click to toggle source
# File lib/syntaxer/reader.rb, line 54
def build(skip_default_rules = false, default_rules_file = SYNTAXER_RULES_FILE)
  reader = new
  reader.parse(File.read(default_rules_file)) unless skip_default_rules
  reader
end
load(*dsl_files) click to toggle source

Read files from params and send to {#parse} method to fill in {Syntaxer::LanguageDefinition LanguageDefinition} objects.

@param [Array] dsl_files Files with syntaxer rules and language definitions to be used in syntax checking

@return [DSLReader] reader object

@raise [DSLFileNotFoundError] If file with file is not exists

# File lib/syntaxer/reader.rb, line 41
def load(*dsl_files)
  reader = build
  dsl_files = [dsl_files].flatten
  dsl_files.each do |file|
    begin
      reader.parse(File.read(file))
    rescue SystemCallError
      raise ::Syntaxer::Reader::DSLFileNotFoundError, "Error reading syntaxer rules file with path '#{file}'!  Please ensure it exists and that it is accessible."
    end
  end
  reader
end
new() click to toggle source
# File lib/syntaxer/reader.rb, line 12
def initialize
  @rules = LanguageRules.new
  @ignore_folders = []
end

Public Instance Methods

add_rule(rule) click to toggle source
# File lib/syntaxer/reader.rb, line 17
def add_rule rule
  @rules << rule
  self
end
exec_rule(exec_string) click to toggle source

Create exec rule for language. It may be console string and ruby method

@param [String|Proc]

# File lib/syntaxer/reader.rb, line 140
def exec_rule(exec_string)
  # if it is string create default console runner
  if !exec_string.respond_to?(:call) || exec_string.is_a?(String)
    current_rule.executor = exec_string.scan(/\w+/).first
    current_rule.exec_existence = system("which #{current_rule.executor} > /dev/null")
    exec_rule = Syntaxer::Runner.default(exec_string)
    current_rule.deferred = false
  else
    # if it is proc call it and pass current rule
    current_rule.exec_existence = true
    current_rule.deferred = true # we have run it after all console checkers
    exec_rule = exec_string.call
  end
  current_rule.exec_rule = exec_rule
end
extensions(*args) click to toggle source
# File lib/syntaxer/reader.rb, line 128
def extensions(*args)
  current_rule.extensions = args
end
f(*args)
Alias for: folders
files_count(syntaxer) click to toggle source
# File lib/syntaxer/reader.rb, line 22
def files_count syntaxer
  @rules.map{ |rule|
    if rule.deferred
      0 # skip such files
    else
      rule.files_list(syntaxer.root_path).length
    end
  }.inject(:+)
end
folders(*args) click to toggle source

Stub for DSL folders method.

@note This method won't check if files are really exist.

@param [Array(String)] args File regexps to be assigned for particular language

@example

folders('app/**/*', 'lib/**/*') #=> ['app/**/*', 'lib/**/*']
folders() # => DEFAULT_FILES_MASK

@return [args]

@see syntaxer

# File lib/syntaxer/reader.rb, line 124
def folders(*args)
  current_rule.folders = (args.empty? ? [DEFAULT_FILES_MASK] : args.flatten)
end
Also aliased as: f
ignore(*args)
ignore_folders(ignore_folders) click to toggle source
# File lib/syntaxer/reader.rb, line 156
def ignore_folders(ignore_folders)
  current_rule.ignore_folders = ignore_folders    
end
lang(*args, &block)
Alias for: languages
languages(*args, &block) click to toggle source

The languages block executor

@yield [langs_name] Description of block @return [nil]

@example

languages :ruby do
  folders 'app/**/*', 'lib/**/*'
end

@see syntaxer

# File lib/syntaxer/reader.rb, line 105
def languages(*args, &block)
  args.each do |lang|          
    @current_rule = @rules.find_or_create(lang)
    self.instance_eval(&block)
  end
end
Also aliased as: lang
overall_ignore_folders(*args) click to toggle source
# File lib/syntaxer/reader.rb, line 160
def overall_ignore_folders(*args)
  @ignored_folders = args
end
Also aliased as: ignore
parse(dsl_data) click to toggle source

Parses a syntaxer DSL specification from the string given.

@param [String] dsl_data Text of actual data to be parsed

@raise [DSLSyntaxError] If errors occur on parsing @example

Syntaxer::Reader::DSLReader.new.parse%|
  syntaxer do
    languages :ruby
      folders 'app/**/*', 'lib/**/*'
    end
  end
|
# File lib/syntaxer/reader.rb, line 74
def parse(dsl_data)
  self.instance_eval(dsl_data)
rescue SyntaxError, NoMethodError, NameError => e
  raise DSLSyntaxError, "Illegal DSL syntax: #{e}"
end
specific_files(*args) click to toggle source
# File lib/syntaxer/reader.rb, line 132
def specific_files(*args)
  current_rule.specific_files = args
end
syntaxer(&block) click to toggle source

The top level block executor

@yield Description of block

@example

syntaxer do
  languages :ruby
    folders 'app/**/*', 'lib/**/*'
  end
end
# File lib/syntaxer/reader.rb, line 90
def syntaxer(&block)
  self.instance_eval(&block)
end

Private Instance Methods

current_rule() click to toggle source
# File lib/syntaxer/reader.rb, line 170
def current_rule
  @current_rule
end