1
1
module CodeRay
2
-
2
+
3
3
# = FileType
4
4
#
5
5
# A simple filetype recognizer.
@@ -8,18 +8,18 @@ module CodeRay
8
8
#
9
9
# # determine the type of the given
10
10
# lang = FileType[file_name]
11
- #
11
+ #
12
12
# # return :text if the file type is unknown
13
13
# lang = FileType.fetch file_name, :text
14
- #
14
+ #
15
15
# # try the shebang line, too
16
16
# lang = FileType.fetch file_name, :text, true
17
17
module FileType
18
-
18
+
19
19
UnknownFileType = Class . new Exception
20
-
20
+
21
21
class << self
22
-
22
+
23
23
# Try to determine the file type of the file.
24
24
#
25
25
# +filename+ is a relative or absolute path to a file.
@@ -30,7 +30,7 @@ def [] filename, read_shebang = false
30
30
name = File . basename filename
31
31
ext = File . extname ( name ) . sub ( /^\. / , '' ) # from last dot, delete the leading dot
32
32
ext2 = filename . to_s [ /\. (.*)/ , 1 ] # from first dot
33
-
33
+
34
34
type =
35
35
TypeFromExt [ ext ] ||
36
36
TypeFromExt [ ext . downcase ] ||
@@ -39,10 +39,10 @@ def [] filename, read_shebang = false
39
39
TypeFromName [ name ] ||
40
40
TypeFromName [ name . downcase ]
41
41
type ||= shebang ( filename ) if read_shebang
42
-
42
+
43
43
type
44
44
end
45
-
45
+
46
46
# This works like Hash#fetch.
47
47
#
48
48
# If the filetype cannot be found, the +default+ value
@@ -51,7 +51,7 @@ def fetch filename, default = nil, read_shebang = false
51
51
if default && block_given?
52
52
warn 'Block supersedes default value argument; use either.'
53
53
end
54
-
54
+
55
55
if type = self [ filename , read_shebang ]
56
56
type
57
57
else
@@ -60,9 +60,9 @@ def fetch filename, default = nil, read_shebang = false
60
60
raise UnknownFileType , 'Could not determine type of %p.' % filename
61
61
end
62
62
end
63
-
63
+
64
64
protected
65
-
65
+
66
66
def shebang filename
67
67
return unless File . exist? filename
68
68
File . open filename , 'r' do |f |
@@ -73,9 +73,9 @@ def shebang filename
73
73
end
74
74
end
75
75
end
76
-
76
+
77
77
end
78
-
78
+
79
79
TypeFromExt = {
80
80
'c' => :c ,
81
81
'cfc' => :xml ,
@@ -116,7 +116,7 @@ def shebang filename
116
116
'rhtml' => :erb ,
117
117
'rjs' => :ruby ,
118
118
'rpdf' => :ruby ,
119
- 'ru' => :ruby ,
119
+ 'ru' => :ruby , # config.ru
120
120
'rxml' => :ruby ,
121
121
'sass' => :sass ,
122
122
'sql' => :sql ,
@@ -132,16 +132,19 @@ def shebang filename
132
132
for cpp_alias in %w[ cc cpp cp cxx c++ C hh hpp h++ cu ]
133
133
TypeFromExt [ cpp_alias ] = :cpp
134
134
end
135
-
135
+
136
136
TypeFromShebang = /\b (?:ruby|perl|python|sh)\b /
137
-
137
+
138
138
TypeFromName = {
139
139
'Capfile' => :ruby ,
140
140
'Rakefile' => :ruby ,
141
141
'Rantfile' => :ruby ,
142
142
'Gemfile' => :ruby ,
143
+ 'Guardfile' => :ruby ,
144
+ 'Vagrantfile' => :ruby ,
145
+ 'Appraisals' => :ruby
143
146
}
144
-
147
+
145
148
end
146
-
149
+
147
150
end
0 commit comments