From 043f6e525d801685d39935409184f0a2ccfc3bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=AA=E3=81=A4=E3=81=8D?= Date: Mon, 1 Jan 2024 22:15:02 -0800 Subject: [PATCH] Avoid using `Sprockets::Utils.module_include` in `SasscProcessor` if possible --- lib/sprockets/sassc_processor.rb | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/sprockets/sassc_processor.rb b/lib/sprockets/sassc_processor.rb index b7bbd4235..eee51c253 100644 --- a/lib/sprockets/sassc_processor.rb +++ b/lib/sprockets/sassc_processor.rb @@ -42,7 +42,9 @@ def initialize(options = {}, &block) @cache_key = "#{self.class.name}:#{VERSION}:#{Autoload::SassC::VERSION}:#{@cache_version}".freeze @importer_class = options[:importer] @sass_config = options[:sass_config] || {} + parameters_include_functions = parameters_include_functions? @functions = Module.new do + include Autoload::SassC::Script::Functions if parameters_include_functions include Functions include options[:functions] if options[:functions] class_eval(&block) if block_given? @@ -55,9 +57,13 @@ def call(input) options = engine_options(input, context) engine = Autoload::SassC::Engine.new(input[:data], options) - css = Utils.module_include(Autoload::SassC::Script::Functions, @functions) do - engine.render.sub(/^\n^\/\*# sourceMappingURL=.*\*\/$/m, '') - end + css = if parameters_include_functions? + engine.render + else + Utils.module_include(Autoload::SassC::Script::Functions, @functions) do + engine.render + end + end.sub(/^\n^\/\*# sourceMappingURL=.*\*\/$/m, '') begin map = SourceMapUtils.format_source_map(JSON.parse(engine.source_map), input) @@ -86,6 +92,15 @@ def merge_options(options) options end + def parameters_include_functions? + if defined?(@@parameters_include_functions) + @@parameters_include_functions + else + @@parameters_include_functions = + Autoload::SassC::FunctionsHandler.instance_method(:setup).parameters.include?([:key, :functions]) + end + end + # Public: Functions injected into Sass context during Sprockets evaluation. # # This module may be extended to add global functionality to all Sprockets @@ -275,6 +290,7 @@ def engine_options(input, context) filename: input[:filename], syntax: self.class.syntax, load_paths: input[:environment].paths, + functions: @functions, importer: @importer_class, source_map_contents: false, source_map_file: "#{input[:filename]}.map",