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
# 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

    if link_target && !link_target.include?('/')
      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



51
52
53
# File 'lib/appium_doc_lint/lint/ext_missing.rb', line 51

def fail
  FAIL
end

#invalid_ext?(ext, link_target) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/appium_doc_lint/lint/ext_missing.rb', line 40

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


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

def trim_link link_target
  trim = link_target.start_with?('docs/') && ! link_target.end_with?('/')
  trim ? File.basename(link_target) : link_target
end