dnote 1.3.1 → 1.4.0
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.
- data/HISTORY +13 -0
- data/VERSION +3 -3
- data/lib/dnote/notes.rb +44 -17
- data/lib/dnote/session.rb +1 -1
- data/lib/dnote/version.yml +3 -3
- metadata +14 -5
data/HISTORY
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
= RELEASE HISTORY
|
2
2
|
|
3
|
+
== 1.4.0 / 2010-06-26
|
4
|
+
|
5
|
+
This release adds auto-determination of marker based on file
|
6
|
+
extension. This mean DNote can now scan multiple file types
|
7
|
+
in a single pass. The supported type are fairly small at this
|
8
|
+
point, but will expand in the future. The fallback marker is '#'.
|
9
|
+
You can still force a particular marker using the --marker option.
|
10
|
+
|
11
|
+
Changes:
|
12
|
+
|
13
|
+
* Support for automatic markers.
|
14
|
+
|
15
|
+
|
3
16
|
== 1.3.1 / 2010-06-11
|
4
17
|
|
5
18
|
This release fixes a simple bug. Some version of Ruby do not have
|
data/VERSION
CHANGED
data/lib/dnote/notes.rb
CHANGED
@@ -9,8 +9,8 @@ module DNote
|
|
9
9
|
# of any labeled comments. Labels are all-cap single word prefixes
|
10
10
|
# to a comment ending in a colon.
|
11
11
|
#
|
12
|
-
# Special labels do require the colon. By default these are
|
13
|
-
# +FIXME+, +OPTIMIZE+ and +DEPRECATE+.
|
12
|
+
# Special labels do not require the colon. By default these are
|
13
|
+
# +TODO+, +FIXME+, +OPTIMIZE+, +THINK+ and +DEPRECATE+.
|
14
14
|
#
|
15
15
|
#--
|
16
16
|
# TODO: Add ability to read header notes. They often
|
@@ -23,7 +23,7 @@ module DNote
|
|
23
23
|
DEFAULT_PATHS = ["**/*.rb"]
|
24
24
|
|
25
25
|
# Default note labels to look for in source code. (NOT CURRENTLY USED!)
|
26
|
-
DEFAULT_LABELS = ['TODO', 'FIXME', 'OPTIMIZE', 'DEPRECATE']
|
26
|
+
DEFAULT_LABELS = ['TODO', 'FIXME', 'OPTIMIZE', 'THINK', 'DEPRECATE']
|
27
27
|
|
28
28
|
# Files to search for notes.
|
29
29
|
attr_accessor :files
|
@@ -42,7 +42,8 @@ module DNote
|
|
42
42
|
@files = [files].flatten
|
43
43
|
@labels = [options[:labels] || DEFAULT_LABELS].flatten.compact
|
44
44
|
@colon = options[:colon].nil? ? true : options[:colon]
|
45
|
-
@marker = options[:marker]
|
45
|
+
@marker = options[:marker] #|| '#'
|
46
|
+
@remark = {}
|
46
47
|
parse
|
47
48
|
end
|
48
49
|
|
@@ -81,6 +82,7 @@ module DNote
|
|
81
82
|
files.each do |fname|
|
82
83
|
next unless File.file?(fname)
|
83
84
|
#next unless fname =~ /\.rb$/ # TODO: should this be done?
|
85
|
+
mark = remark(fname)
|
84
86
|
File.open(fname) do |f|
|
85
87
|
lineno, save, text = 0, nil, nil
|
86
88
|
while line = f.gets
|
@@ -94,14 +96,14 @@ module DNote
|
|
94
96
|
else
|
95
97
|
if text
|
96
98
|
case line
|
97
|
-
when /^\s*#{
|
99
|
+
when /^\s*#{mark}+\s*$/, /(?!^\s*#{mark})/, /^\s*#{mark}[+][+]/
|
98
100
|
text.strip!
|
99
101
|
text = nil
|
100
102
|
else
|
101
103
|
if text[-1,1] == "\n"
|
102
|
-
text << line.gsub(/^\s*#{
|
104
|
+
text << line.gsub(/^\s*#{mark}\s*/,'')
|
103
105
|
else
|
104
|
-
text << "\n" << line.gsub(/^\s*#{
|
106
|
+
text << "\n" << line.gsub(/^\s*#{mark}\s*/,'')
|
105
107
|
end
|
106
108
|
end
|
107
109
|
end
|
@@ -126,7 +128,7 @@ module DNote
|
|
126
128
|
def match_special(line, lineno, file)
|
127
129
|
rec = nil
|
128
130
|
labels.each do |label|
|
129
|
-
if md = match_special_regex(label).match(line)
|
131
|
+
if md = match_special_regex(label, file).match(line)
|
130
132
|
text = md[1]
|
131
133
|
#rec = {'label'=>label,'file'=>file,'line'=>lineno,'note'=>text}
|
132
134
|
rec = Note.new(file, label, lineno, text)
|
@@ -138,18 +140,19 @@ module DNote
|
|
138
140
|
#--
|
139
141
|
# TODO: ruby-1.9.1-p378 reports: `match': invalid byte sequence in UTF-8
|
140
142
|
#++
|
141
|
-
def match_special_regex(label)
|
143
|
+
def match_special_regex(label, file)
|
144
|
+
mark = remark(file)
|
142
145
|
if colon
|
143
|
-
/#{
|
146
|
+
/#{mark}\s*#{Regexp.escape(label)}[:]\s*(.*?)$/
|
144
147
|
else
|
145
|
-
/#{
|
148
|
+
/#{mark}\s*#{Regexp.escape(label)}[:]?\s*(.*?)$/
|
146
149
|
end
|
147
150
|
end
|
148
151
|
|
149
152
|
# Match notes that are labeled with a colon.
|
150
153
|
def match_general(line, lineno, file)
|
151
154
|
rec = nil
|
152
|
-
if md = match_general_regex.match(line)
|
155
|
+
if md = match_general_regex(file).match(line)
|
153
156
|
label, text = md[1], md[2]
|
154
157
|
#rec = {'label'=>label,'file'=>file,'line'=>lineno,'note'=>text}
|
155
158
|
rec = Note.new(file, label, lineno, text)
|
@@ -158,11 +161,12 @@ module DNote
|
|
158
161
|
end
|
159
162
|
|
160
163
|
#
|
161
|
-
def match_general_regex
|
164
|
+
def match_general_regex(file)
|
165
|
+
mark = remark(file)
|
162
166
|
if colon
|
163
|
-
/#{
|
167
|
+
/#{mark}\s*([A-Z]+)[:]\s+(.*?)$/
|
164
168
|
else
|
165
|
-
/#{
|
169
|
+
/#{mark}\s*([A-Z]+)[:]?\s+(.*?)$/
|
166
170
|
end
|
167
171
|
end
|
168
172
|
|
@@ -233,8 +237,31 @@ module DNote
|
|
233
237
|
end
|
234
238
|
|
235
239
|
#
|
236
|
-
def remark
|
237
|
-
@remark ||=
|
240
|
+
def remark(file)
|
241
|
+
@remark[File.extname(file)] ||= (
|
242
|
+
mark = guess_marker(file)
|
243
|
+
Regexp.escape(mark)
|
244
|
+
)
|
245
|
+
end
|
246
|
+
|
247
|
+
# Guess marker based on file extension. Fallsback to '#'
|
248
|
+
# if the extension is unknown.
|
249
|
+
#
|
250
|
+
# TODO: Continue to add comment types.
|
251
|
+
def guess_marker(file)
|
252
|
+
return @marker if @marker # forced marker
|
253
|
+
case File.extname(file)
|
254
|
+
when '.js', '.c', 'cpp', '.css'
|
255
|
+
'//'
|
256
|
+
when '.bas'
|
257
|
+
"'"
|
258
|
+
when '.sql', '.ada'
|
259
|
+
'--'
|
260
|
+
when '.asm'
|
261
|
+
';'
|
262
|
+
else
|
263
|
+
'#'
|
264
|
+
end
|
238
265
|
end
|
239
266
|
|
240
267
|
# Convert to array of hashes then to YAML.
|
data/lib/dnote/session.rb
CHANGED
data/lib/dnote/version.yml
CHANGED
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dnote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 7
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 1
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 1.4.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Thomas Sawyer
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-06-
|
18
|
+
date: 2010-06-26 00:00:00 -04:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: syckle
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
version: "0"
|
@@ -33,9 +36,11 @@ dependencies:
|
|
33
36
|
name: lemon
|
34
37
|
prerelease: false
|
35
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
36
40
|
requirements:
|
37
41
|
- - ">="
|
38
42
|
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
39
44
|
segments:
|
40
45
|
- 0
|
41
46
|
version: "0"
|
@@ -121,23 +126,27 @@ rdoc_options:
|
|
121
126
|
require_paths:
|
122
127
|
- lib
|
123
128
|
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
124
130
|
requirements:
|
125
131
|
- - ">="
|
126
132
|
- !ruby/object:Gem::Version
|
133
|
+
hash: 3
|
127
134
|
segments:
|
128
135
|
- 0
|
129
136
|
version: "0"
|
130
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
131
139
|
requirements:
|
132
140
|
- - ">="
|
133
141
|
- !ruby/object:Gem::Version
|
142
|
+
hash: 3
|
134
143
|
segments:
|
135
144
|
- 0
|
136
145
|
version: "0"
|
137
146
|
requirements: []
|
138
147
|
|
139
148
|
rubyforge_project: dnote
|
140
|
-
rubygems_version: 1.3.
|
149
|
+
rubygems_version: 1.3.7
|
141
150
|
signing_key:
|
142
151
|
specification_version: 3
|
143
152
|
summary: Extract developer's notes from source code
|