class SCSSLint::Linter::UrlFormat

Checks the format of URLs for unnecessary protocols or domains.

Public Instance Methods

visit_prop(node) { || ... } click to toggle source
# File lib/scss_lint/linter/url_format.rb, line 19
def visit_prop(node)
  if url_literal?(node.value)
    url = node.value.to_sass.gsub(/^url\((.*)\)$/, '\\1')
    check_url(url, node)
  end

  yield
end
visit_script_funcall(node) { || ... } click to toggle source
# File lib/scss_lint/linter/url_format.rb, line 8
def visit_script_funcall(node)
  return unless node.name == 'url'

  if url_string?(node.args[0])
    url = node.args[0].value.value.to_s
    check_url(url, node)
  end

  yield
end

Private Instance Methods

check_url(url, node) click to toggle source
# File lib/scss_lint/linter/url_format.rb, line 45
def check_url(url, node)
  return if url.match(/^data:/)
  uri = URI(url)

  if uri.scheme || uri.host
    add_lint(node, "URL `#{url}` should not contain protocol or domain")
  end
rescue URI::Error => ex
  add_lint(node, "Invalid URL `#{url}`: #{ex}")
end
url_literal?(prop_value) click to toggle source
# File lib/scss_lint/linter/url_format.rb, line 30
def url_literal?(prop_value)
  return unless prop_value.is_a?(Sass::Script::Tree::Literal)
  return unless prop_value.value.is_a?(Sass::Script::Value::String)
  return unless prop_value.value.type == :identifier

  prop_value.to_sass.match(/^url\(/)
end
url_string?(arg) click to toggle source
# File lib/scss_lint/linter/url_format.rb, line 38
def url_string?(arg)
  return unless arg.is_a?(Sass::Script::Tree::Literal)
  return unless arg.value.is_a?(Sass::Script::Value::String)

  arg.value.type == :string
end