dftsg 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cd1d096457fc638d82475c05c61021cdeb1677ca
4
+ data.tar.gz: c5dee1bd92bab45600463e6e4220030862e426c4
5
+ SHA512:
6
+ metadata.gz: 290ea22bcf6f04dddf6e9ecb8e5e28cc50417131d5cf198a168f14eb6b6b46589ac735fe27ed0c43f3e4259aefbad899c9d042369ca6d720bd505f67e33133ba
7
+ data.tar.gz: 7460156a21c138fe88c2a34b2f87c6c2c5a5bbee89462b4e60a6578215f4269fb1099ea0b7be732273dd1f3730843b8eb0b05d973a6a9b528bd2c44ee984c401
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *DS_Store*
@@ -0,0 +1,13 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
+
5
+ We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.
6
+
7
+ Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
8
+
9
+ Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
10
+
11
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
12
+
13
+ This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in dftsg.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Christopher John Morris
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # dftsg
2
+
3
+ Generates a report of how well a directory of Swift files conforms to the Dafiti Swift Style Guide
4
+
5
+ ## Installation
6
+
7
+ To install:
8
+
9
+ $ gem install dftsg
10
+
11
+ Depending on your gem env, you may have to add the executable's path to $PATH
12
+
13
+ ## Usage
14
+
15
+ To create a report:
16
+
17
+ $ dftsg gen directory/of/swift/files
18
+
19
+ To create a report and set the output directory:
20
+
21
+ $ dftsg gen directory/of/swift/files --output directory/of/report
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "dftsg"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/dftsg ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'commander/import'
5
+
6
+ require_relative '../lib/FormGenerator'
7
+
8
+ input = nil
9
+
10
+ program :version, '0.0.1'
11
+ program :description, 'Validates Swift Style Guide'
12
+
13
+ command :gen do |c|
14
+ c.syntax = 'dftsg gen directory/with/Swift/files'
15
+ c.summary = ''
16
+ c.description = ''
17
+ c.example 'description', 'dftsg input '
18
+ c.option '--output STRING', 'Optional output directory'
19
+ c.action do |args, options|
20
+ if args.count == 0
21
+ puts
22
+ puts "You must provide the directory of Swift files to analyze:"
23
+ puts
24
+ puts "\t dftsg gen directory/with/Swift/files"
25
+ puts
26
+ else
27
+ input = args.first
28
+ output = options.output
29
+
30
+ formGenerator = FormGenerator.new(input, output)
31
+ formGenerator.generateForm
32
+ end
33
+ end
34
+ end
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/dftsg.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'dftsg/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "dftsg"
8
+ spec.version = Dftsg::VERSION
9
+ spec.authors = ['Christopher John Morris']
10
+ spec.email = %w(christopher.morris@dafiti.com.br)
11
+
12
+ if spec.respond_to?(:metadata)
13
+ spec.metadata['allowed_push_host'] = 'http://rubygems.org'
14
+ end
15
+
16
+ spec.summary = 'Simple Swift Style Guide analyzer'
17
+ spec.description = 'A Swift Style Guide analyzer that generates a report showing how well a file or files conform to the Style Guide.'
18
+ spec.homepage = 'http://rubygems.org'
19
+ spec.license = 'MIT'
20
+
21
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ spec.bindir = "bin"
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = %w(lib)
25
+
26
+ spec.add_development_dependency 'bundler', '~> 1.8'
27
+ spec.add_development_dependency 'rake', '~> 10.0'
28
+ spec.add_dependency "commander", "~> 4.2.0"
29
+
30
+ end
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative 'LineType'
4
+ require_relative 'LineDeterminator'
5
+ require 'fileutils'
6
+
7
+ class AnalysisHTMLFile
8
+ def initialize (directory, name)
9
+ @directory = "#{directory}/#{File.dirname(name.gsub("./", ""))}"
10
+ @name = name.gsub("#{File.dirname(name)}", "").gsub("/", "")
11
+ @validLines = 0
12
+ @invalidLines = 0
13
+ @totalLines = 0
14
+ end
15
+
16
+ def beginWriting
17
+ FileUtils::mkdir_p "#{@directory}"
18
+ @fileHtml = File.new("#{@directory}/#{@name}.html", "w+")
19
+ @fileHtml.puts "<HTML><BODY>"
20
+ @fileHtml.puts "<pre>"
21
+ end
22
+
23
+ def addLine (line)
24
+ lineType = LineDeterminator.new(line).lineType
25
+ @totalLines += 1
26
+ if lineType != nil
27
+ if lineType.instance_of? ClassLineType or lineType.instance_of? VariableLineType or lineType.instance_of? ConstantLineType or lineType.instance_of? CommentLineType
28
+ font = "<font size=\"3\""
29
+ if !lineType.isValid
30
+ font += "color=\"red\""
31
+ @invalidLines += 1
32
+ else
33
+ font += "color=\"#52CC52\""
34
+ @validLines += 1
35
+ end
36
+ font += ">#{line.chomp}</font>"
37
+ @fileHtml.puts font
38
+ else
39
+ @fileHtml.puts "<code>#{line.chomp}</code>"
40
+ end
41
+ end
42
+ end
43
+
44
+ def endWriting
45
+ @fileHtml.puts "</pre>"
46
+ @fileHtml.puts "</BODY></HTML>"
47
+ @fileHtml.close()
48
+ end
49
+
50
+ def directory
51
+ @directory
52
+ end
53
+
54
+ def name
55
+ @name
56
+ end
57
+
58
+ def validLines
59
+ @validLines
60
+ end
61
+
62
+ def invalidLines
63
+ @invalidLines
64
+ end
65
+
66
+ def totalLines
67
+ @totalLines
68
+ end
69
+
70
+ end
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative 'LineDeterminator'
4
+ require_relative 'IndexHTMLFile'
5
+ require_relative 'AnalysisHTMLFile'
6
+
7
+ class FormGenerator
8
+
9
+ def initialize(searchDirectoryArg, outputDirectory)
10
+
11
+ @analysisDirectory = "SwiftStyleGuideValidator"
12
+ if outputDirectory != nil
13
+ @analysisDirectory = "#{outputDirectory}/#{@analysisDirectory}"
14
+ end
15
+
16
+ @filesDir = "AnalysisFiles"
17
+
18
+ @searchDirectoryArg = "."
19
+ if searchDirectoryArg != nil
20
+ @searchDirectoryArg = searchDirectoryArg
21
+ @searchDirectoryArg = searchDirectoryArg.chomp("/")
22
+ end
23
+
24
+ end
25
+
26
+ def generateForm
27
+ if directoryHasSwiftFiles == true
28
+ if File.directory?(@analysisDirectory)
29
+ FileUtils.rm_rf(@analysisDirectory)
30
+ end
31
+ Dir.mkdir(@analysisDirectory)
32
+
33
+ @IndexHTMLFile = IndexHTMLFile.new(@analysisDirectory)
34
+ @IndexHTMLFile.beginWriting
35
+
36
+ counter = 0
37
+
38
+ Dir.glob("#{@searchDirectoryArg}/**/*.swift") do |item|
39
+ next if item == '.' or item == '..'
40
+ addItem item
41
+ counter += 1
42
+ if counter % 50 == 0
43
+ print "Files processed: #{counter}\r"
44
+ end
45
+ end
46
+ puts
47
+
48
+ @IndexHTMLFile.endWriting
49
+ else
50
+ puts "No Swift files found in directory #{@searchDirectoryArg}"
51
+ end
52
+ end
53
+
54
+ def addItem (item)
55
+ analysisFile = AnalysisHTMLFile.new("#{@analysisDirectory}/#{@filesDir}", item)
56
+ analysisFile.beginWriting
57
+
58
+ f = File.open(item, "r")
59
+ f.each_line do |line|
60
+ analysisFile.addLine (line)
61
+ end
62
+ f.close
63
+
64
+ @IndexHTMLFile.addAnalysisItem (analysisFile)
65
+
66
+ analysisFile.endWriting
67
+ end
68
+
69
+ def directoryHasSwiftFiles
70
+ hasSwiftFiles = false
71
+ Dir.glob("#{@searchDirectoryArg}/**/*.swift") do |item|
72
+ next if item == '.' or item == '..'
73
+ hasSwiftFiles = true
74
+ break
75
+ end
76
+ hasSwiftFiles
77
+ end
78
+ end
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class IndexHTMLFile
4
+
5
+ def initialize(directory)
6
+ @directory = directory
7
+ @totalLines = 0
8
+ @totalValidLines = 0
9
+ @totalInvalidLines = 0
10
+ @indexHTMLString = ""
11
+ end
12
+
13
+ def beginWriting
14
+ @indexHTML = File.new("#{@directory}/index.html", "w+")
15
+ end
16
+
17
+ def addAnalysisItem (analysisFile)
18
+ @totalLines += analysisFile.totalLines
19
+ @totalInvalidLines += analysisFile.invalidLines
20
+ @totalValidLines += analysisFile.validLines
21
+
22
+ htmlFileName = analysisFile.name
23
+ htmlFileName = htmlFileName.gsub(".swift", "")
24
+ htmlFileName = htmlFileName.gsub("./", "")
25
+
26
+ @indexHTMLString += "<tr>"
27
+ @indexHTMLString += "\n<td>"
28
+ @indexHTMLString += "\n<a href=\"#{analysisFile.directory.gsub(@directory + "/", "")}/#{analysisFile.name}.html\">#{htmlFileName}.html</a>"
29
+ @indexHTMLString += "\n</td>"
30
+ @indexHTMLString += "\n<td align=\"center\">"
31
+ @indexHTMLString += "\n#{analysisFile.invalidLines}"
32
+ @indexHTMLString += "\n</td>"
33
+
34
+ validLinePercentage = ((analysisFile.invalidLines / Float(analysisFile.totalLines) - 1) * -100).round
35
+ color = colorForValidLinePercentage validLinePercentage
36
+ @indexHTMLString += "\n<td align=\"center\" bgcolor=\"#{color}\">"
37
+ @indexHTMLString += "\n#{validLinePercentage}%"
38
+ @indexHTMLString += "\n</td>"
39
+ @indexHTMLString += "\n</tr>"
40
+ end
41
+
42
+ def addTotalStatsTable
43
+ @indexHTML.puts "<table cellpadding=\"0\" cellspacing=\"10\" class=\"table\" bgcolor=\"#E8E8E8\" col width=\"800\">"
44
+ @indexHTML.puts "<tr>"
45
+ @indexHTML.puts "<th>Total Lines</th>"
46
+ @indexHTML.puts "<th>Invalid Lines</th>"
47
+ @indexHTML.puts "<th>Valid Lines</th>"
48
+ @indexHTML.puts "<th>Percent Valid</th>"
49
+ @indexHTML.puts "</tr>"
50
+
51
+ @indexHTML.puts "<tr>"
52
+
53
+ @indexHTML.puts "<td align=\"center\">"
54
+ @indexHTML.puts "#{@totalLines}"
55
+ @indexHTML.puts "</td>"
56
+
57
+ @indexHTML.puts "<td align=\"center\">"
58
+ @indexHTML.puts "#{@totalInvalidLines}"
59
+ @indexHTML.puts "</td>"
60
+
61
+ @indexHTML.puts "<td align=\"center\">"
62
+ @indexHTML.puts "#{@totalValidLines}"
63
+ @indexHTML.puts "</td>"
64
+
65
+ validLinePercentage = ((@totalInvalidLines / Float(@totalLines) - 1) * -1 * 100).round
66
+ color = colorForValidLinePercentage validLinePercentage
67
+ @indexHTML.puts "<td align=\"center\" bgcolor=\"#{color}\">"
68
+ @indexHTML.puts "#{validLinePercentage}%"
69
+ @indexHTML.puts "</td>"
70
+
71
+ @indexHTML.puts "</tr>"
72
+
73
+ @indexHTML.puts "</table>"
74
+ end
75
+
76
+ def addAnalysisFilesTable
77
+ @indexHTML.puts "<table cellpadding=\"0\" cellspacing=\"10\" class=\"table\" bgcolor=\"#E8E8E8\" col width=\"800\">"
78
+ @indexHTML.puts "<tr>"
79
+ @indexHTML.puts "<th>File</th>"
80
+ @indexHTML.puts "<th>Invalid Statements</th>"
81
+ @indexHTML.puts "<th>Percent Valid</th>"
82
+ @indexHTML.puts "</tr>"
83
+ @indexHTML.puts @indexHTMLString
84
+ @indexHTML.puts "</table>"
85
+ end
86
+
87
+ def colorForValidLinePercentage (percentage)
88
+ if percentage >= 95
89
+ return "#52CC52" # Green
90
+ end
91
+
92
+ if percentage >= 90 and percentage < 95
93
+ return "yellow"
94
+ end
95
+
96
+ if percentage < 90
97
+ return "#FF0000" # Red
98
+ end
99
+ end
100
+
101
+ def endWriting
102
+ @indexHTML.puts "<HTML><BODY>"
103
+ addTotalStatsTable
104
+ addAnalysisFilesTable
105
+ @indexHTML.puts "</BODY></HTML>"
106
+ @indexHTML.close()
107
+ end
108
+ end
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class LineDeterminator
4
+ def initialize (line)
5
+ @strippedLine = line.strip
6
+ end
7
+
8
+ def isComment
9
+ @strippedLine[0...2] == "//" or @strippedLine[0...3] == "///"
10
+ end
11
+
12
+ def isVar
13
+ @strippedLine[0...3] == "var"
14
+ end
15
+
16
+ def isLet
17
+ @strippedLine[0...3] == "let"
18
+ end
19
+
20
+ def isClass
21
+ @strippedLine[0...5] == "class"
22
+ end
23
+
24
+ def isFunction
25
+ @strippedLine[0...4] == "func"
26
+ end
27
+
28
+ def lineType
29
+ if isComment
30
+ return CommentLineType.new(@strippedLine)
31
+ end
32
+
33
+ if isVar
34
+ return VariableLineType.new(@strippedLine)
35
+ end
36
+
37
+ if isLet
38
+ return ConstantLineType.new(@strippedLine)
39
+ end
40
+
41
+ if isClass
42
+ return ClassLineType.new(@strippedLine)
43
+ end
44
+
45
+ return LineType.new(@strippedLine)
46
+ end
47
+ end
data/lib/LineType.rb ADDED
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class LineType
4
+ def initialize (strippedLine)
5
+ @strippedLine = strippedLine
6
+ end
7
+
8
+ def isValid
9
+ !(s[-1] != ";")
10
+ end
11
+ end
12
+
13
+ class VariableLineType < LineType
14
+
15
+ UNINITIALIZED_REGEX = /var[" "]([a-zA-Z0-9])\w+: [a-zA-Z]*([!]?[?]?)/
16
+ INITIALIZED_REGEX = /var[" "]([a-zA-Z0-9])\w+ = ([a-zA-Z0-9]?"?[(]?[)]?.?)*/
17
+
18
+ def isValid
19
+ isValidUninitialized || isValidInitialized
20
+ # super.isValid && (isValidUninitialized || isValidInitialized)
21
+ end
22
+
23
+ def isValidUninitialized
24
+ !!(@strippedLine =~ UNINITIALIZED_REGEX) && !(@strippedLine.include? "=")
25
+ end
26
+
27
+ def isValidInitialized
28
+ !!(@strippedLine =~ INITIALIZED_REGEX)
29
+ end
30
+ end
31
+
32
+ class ConstantLineType < LineType
33
+
34
+ UNINITIALIZED_REGEX = /let[" "]([a-zA-Z0-9])\w+: [a-zA-Z]*([!]?[?]?)/
35
+ INITIALIZED_REGEX = /let[" "]([a-zA-Z0-9])\w+ = ([a-zA-Z0-9]?"?[(]?[)]?.?)*/
36
+
37
+ def isValid
38
+ isValidUninitialized || isValidInitialized
39
+ # super.isValid && isValidUninitialized || isValidInitialized
40
+ end
41
+
42
+ def isValidUninitialized
43
+ !!(@strippedLine =~ UNINITIALIZED_REGEX) && !(@strippedLine.include? "=")
44
+ end
45
+
46
+ def isValidInitialized
47
+ !!(@strippedLine =~ INITIALIZED_REGEX)
48
+ end
49
+ end
50
+
51
+ class ClassLineType < LineType
52
+
53
+ CLASS_REGEX = /class[" "]([a-zA-Z])\w+((: (([a-zA-Z])\w+))((, (([a-zA-Z])\w+)){0,10}))? {/
54
+
55
+ def isValid
56
+ !!(@strippedLine =~ CLASS_REGEX)
57
+ end
58
+
59
+ end
60
+
61
+ class CommentLineType < LineType
62
+
63
+ COMMENT_WITH_COMMENTS_REGEX = /\/\/\/?(( (?=.))(.{0,}))/
64
+ COMMENT_WITHOUT_COMMENTS_REGEX = /\/\/\/?(?!.)/
65
+
66
+ def isValid
67
+ !!(@strippedLine =~ COMMENT_WITH_COMMENTS_REGEX) || !!(@strippedLine =~ COMMENT_WITHOUT_COMMENTS_REGEX)
68
+ end
69
+
70
+ end
71
+
@@ -0,0 +1,3 @@
1
+ module Dftsg
2
+ VERSION = "0.1.1"
3
+ end
Binary file
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dftsg
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Christopher John Morris
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: commander
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 4.2.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 4.2.0
55
+ description: A Swift Style Guide analyzer that generates a report showing how well
56
+ a file or files conform to the Style Guide.
57
+ email:
58
+ - christopher.morris@dafiti.com.br
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - .gitignore
64
+ - CODE_OF_CONDUCT.md
65
+ - Gemfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - bin/console
70
+ - bin/dftsg
71
+ - bin/setup
72
+ - dftsg.gemspec
73
+ - lib/AnalysisHTMLFile.rb
74
+ - lib/FormGenerator.rb
75
+ - lib/IndexHTMLFile.rb
76
+ - lib/LineDeterminator.rb
77
+ - lib/LineType.rb
78
+ - lib/dftsg/version.rb
79
+ - pkg/dftsg-0.1.0.gem
80
+ homepage: http://rubygems.org
81
+ licenses:
82
+ - MIT
83
+ metadata:
84
+ allowed_push_host: http://rubygems.org
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.0.14
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Simple Swift Style Guide analyzer
105
+ test_files: []