56 lines
1.8 KiB
Ruby
56 lines
1.8 KiB
Ruby
|
module Sass
|
||
|
# A deprecation warning that should only be printed once for a given line in a
|
||
|
# given file.
|
||
|
#
|
||
|
# A global Deprecation instance should be created for each type of deprecation
|
||
|
# warning, and `warn` should be called each time a warning is needed.
|
||
|
class Deprecation
|
||
|
@@allow_double_warnings = false
|
||
|
|
||
|
# Runs a block in which double deprecation warnings for the same location
|
||
|
# are allowed.
|
||
|
def self.allow_double_warnings
|
||
|
old_allow_double_warnings = @@allow_double_warnings
|
||
|
@@allow_double_warnings = true
|
||
|
yield
|
||
|
ensure
|
||
|
@@allow_double_warnings = old_allow_double_warnings
|
||
|
end
|
||
|
|
||
|
def initialize
|
||
|
# A set of filename, line pairs for which warnings have been emitted.
|
||
|
@seen = Set.new
|
||
|
end
|
||
|
|
||
|
# Prints `message` as a deprecation warning associated with `filename`,
|
||
|
# `line`, and optionally `column`.
|
||
|
#
|
||
|
# This ensures that only one message will be printed for each line of a
|
||
|
# given file.
|
||
|
#
|
||
|
# @overload warn(filename, line, message)
|
||
|
# @param filename [String, nil]
|
||
|
# @param line [Number]
|
||
|
# @param message [String]
|
||
|
# @overload warn(filename, line, column, message)
|
||
|
# @param filename [String, nil]
|
||
|
# @param line [Number]
|
||
|
# @param column [Number]
|
||
|
# @param message [String]
|
||
|
def warn(filename, line, column_or_message, message = nil)
|
||
|
return if !@@allow_double_warnings && @seen.add?([filename, line]).nil?
|
||
|
if message
|
||
|
column = column_or_message
|
||
|
else
|
||
|
message = column_or_message
|
||
|
end
|
||
|
|
||
|
location = "line #{line}"
|
||
|
location << ", column #{column}" if column
|
||
|
location << " of #{filename}" if filename
|
||
|
|
||
|
Sass::Util.sass_warn("DEPRECATION WARNING on #{location}:\n#{message}")
|
||
|
end
|
||
|
end
|
||
|
end
|