Class: Appium::Lint::ExtMissing

Inherits:
Base
  • Object
show all
Defined in:
lib/appium_doc_lint/lint/ext_missing.rb

Overview

all markdown links must have an extension

[link to read](readme.md)

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

Constant Summary collapse

FAIL =
'Relative markdown links must have an extension'

Instance Attribute Summary

Attributes inherited from Base

#input, #warnings

Instance Method Summary collapse

Methods inherited from Base

#initialize, #warn

Constructor Details

This class inherits a constructor from Appium::Lint::Base

Instance Method Details

#callObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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

#failObject



60
61
62
# File 'lib/appium_doc_lint/lint/ext_missing.rb', line 60

def fail
  FAIL
end

#invalid_ext?(ext, link_target) ⇒ Boolean

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

Returns:

  • (Boolean)


44
45
46
# File 'lib/appium_doc_lint/lint/ext_missing.rb', line 44

def invalid_ext? ext, link_target
  ext.empty? && ! link_target.end_with?('/')
end

process docs/en/filename.md#testing links handle relative links [getting started](../../README.md)



50
51
52
53
54
55
56
# File 'lib/appium_doc_lint/lint/ext_missing.rb', line 50

def trim_link link_target
  link_target = link_target.strip if link_target
  return link_target if link_target.end_with?('/')
  # trim doc and relative
  trim = link_target.start_with?('docs/') || link_target.start_with?('../')
  trim ? File.basename(link_target) : link_target
end