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