class Appium::Lint::ExtMissing

all markdown links must have an extension

[link to read](readme.md)

invalid examples: [link](readme) [link](readme#testing)

Constants

FAIL

Public Instance Methods

call() click to toggle source
# File lib/appium_doc_lint/lint/ext_missing.rb, line 12
def call
  input.lines.each_with_index do |line, index|
    # regex from github.com/appium/api-docs/lib/api_docs.rb
    # /(?<!!) -- negative look behind. excludes image links

    match_data = line.match(/(?<!!) \[ ( [^\[]* ) \] \( ( [^)]+ ) \)/x)
    next unless match_data # skip nil matches
    full        = match_data[0]
    link_text   = match_data[1]
    link_target = match_data[2]

    # process docs/en/filename.md#testing links
    link_target = trim_link link_target

    no_slash = !link_target.include?('/')
    not_link_to_self = link_target != '#'

    if link_target && no_slash && not_link_to_self
      ext = File.extname link_target
      if invalid_ext?(ext, link_target)
        warn index, full
      else
        ext, hash = ext.split '#'
        warn index, full if invalid_ext?(ext, link_target)
      end
    end
  end

  warnings
end
fail() click to toggle source
# File lib/appium_doc_lint/lint/ext_missing.rb, line 60
def fail
  FAIL
end
invalid_ext?(ext, link_target) click to toggle source

from github.com/appium/api-docs/lib/api_docs.rb

# File lib/appium_doc_lint/lint/ext_missing.rb, line 44
def invalid_ext? ext, link_target
  ext.empty? && ! link_target.end_with?('/')
end