class Steep::Project::DSL

def target(name, template: nil, &block)

def target(name, template: nil, &block)
  target = if template
             self.class.templates[template]&.dup&.update(name: name) or
               raise "Unknown template: #{template}, available templates: #{@@templates.keys.join(", ")}"
           else
             TargetDSL.new(name)
           end
  target.instance_eval(&block) if block_given?
  Project::Target.new(
    name: target.name,
    source_patterns: target.sources,
    ignore_patterns: target.ignored_sources,
    signature_patterns: target.signatures,
    options: Options.new.tap do |options|
      options.libraries.push(*target.libraries)
      case target.strictness_level
      when :strict
        options.apply_strict_typing_options!
      when :lenient
        options.apply_lenient_typing_options!
      end
      case target.vendor_dir
      when Array
        options.vendored_stdlib_path = target.vendor_dir[0]
        options.vendored_gems_path = target.vendor_dir[1]
      when Pathname
        options.vendored_stdlib_path = target.vendor_dir + "stdlib"
        options.vendored_gems_path = target.vendor_dir + "gems"
      end
    end
  ).tap do |target|
    project.targets << target
  end
end