xautoload, in addition to the other class loading stuff, enables a wildcard syntax for the files[] directive, in case you don't want the full transition to PSR-4. This allows to clean up your info files, but keep class files where they are, so you can do the real PSR-4 transition another day.
This has little performance implications, because the scan only happens when the class files registry is rebuilt.
Example: Views.
In views.info, the files[] stuff could be replaced with
; Only look at the top level.
files[] = handlers/*.inc
files[] = includes/*.inc
files[] = plugins/*.inc
; Scan the one-below-top level and deeper.
files[] = modules/*/**/*.inc
; Scan the top level and deeper.
files[] = tests/**/*.test
The /*/
wildcard can be any string between two slashes.
The /**/
wildcard can be either /
or /*/
or /*/*/
etc.
A /**
ending a string can be just anything starting with a slash.
A /*.inc
ending a string is a filename with a ".inc" extension.
The original views.info:
12 files[] = handlers/views_handler_area.inc
13 files[] = handlers/views_handler_area_result.inc
14 files[] = handlers/views_handler_area_text.inc
15 files[] = handlers/views_handler_area_view.inc
16 files[] = handlers/views_handler_argument.inc
17 files[] = handlers/views_handler_argument_date.inc
18 files[] = handlers/views_handler_argument_formula.inc
19 files[] = handlers/views_handler_argument_many_to_one.inc
20 files[] = handlers/views_handler_argument_null.inc
21 files[] = handlers/views_handler_argument_numeric.inc
22 files[] = handlers/views_handler_argument_string.inc
23 files[] = handlers/views_handler_argument_group_by_numeric.inc
24 files[] = handlers/views_handler_field.inc
25 files[] = handlers/views_handler_field_counter.inc
26 files[] = handlers/views_handler_field_boolean.inc
27 files[] = handlers/views_handler_field_custom.inc
28 files[] = handlers/views_handler_field_date.inc
29 files[] = handlers/views_handler_field_entity.inc
30 files[] = handlers/views_handler_field_markup.inc
31 files[] = handlers/views_handler_field_math.inc
32 files[] = handlers/views_handler_field_numeric.inc
33 files[] = handlers/views_handler_field_prerender_list.inc
34 files[] = handlers/views_handler_field_time_interval.inc
35 files[] = handlers/views_handler_field_serialized.inc
36 files[] = handlers/views_handler_field_url.inc
37 files[] = handlers/views_handler_filter.inc
38 files[] = handlers/views_handler_filter_boolean_operator.inc
39 files[] = handlers/views_handler_filter_boolean_operator_string.inc
40 files[] = handlers/views_handler_filter_date.inc
41 files[] = handlers/views_handler_filter_equality.inc
42 files[] = handlers/views_handler_filter_group_by_numeric.inc
43 files[] = handlers/views_handler_filter_in_operator.inc
44 files[] = handlers/views_handler_filter_many_to_one.inc
45 files[] = handlers/views_handler_filter_numeric.inc
46 files[] = handlers/views_handler_filter_string.inc
47 files[] = handlers/views_handler_relationship.inc
48 files[] = handlers/views_handler_relationship_groupwise_max.inc
49 files[] = handlers/views_handler_sort.inc
50 files[] = handlers/views_handler_sort_date.inc
51 files[] = handlers/views_handler_sort_formula.inc
52 files[] = handlers/views_handler_sort_group_by_numeric.inc
53 files[] = handlers/views_handler_sort_menu_hierarchy.inc
54 files[] = handlers/views_handler_sort_random.inc
55 ; Includes
56 files[] = includes/base.inc
57 files[] = includes/handlers.inc
58 files[] = includes/plugins.inc
59 files[] = includes/view.inc
60 ; Modules
61 files[] = modules/aggregator/views_handler_argument_aggregator_fid.inc
62 files[] = modules/aggregator/views_handler_argument_aggregator_iid.inc
63 files[] = modules/aggregator/views_handler_argument_aggregator_category_cid.inc
64 files[] = modules/aggregator/views_handler_field_aggregator_title_link.inc
65 files[] = modules/aggregator/views_handler_field_aggregator_category.inc
66 files[] = modules/aggregator/views_handler_field_aggregator_item_description.inc
67 files[] = modules/aggregator/views_handler_field_aggregator_xss.inc
68 files[] = modules/aggregator/views_handler_filter_aggregator_category_cid.inc
69 files[] = modules/aggregator/views_plugin_row_aggregator_rss.inc
70 files[] = modules/comment/views_handler_argument_comment_user_uid.inc
71 files[] = modules/comment/views_handler_field_comment.inc
72 files[] = modules/comment/views_handler_field_comment_depth.inc
73 files[] = modules/comment/views_handler_field_comment_link.inc
74 files[] = modules/comment/views_handler_field_comment_link_approve.inc
75 files[] = modules/comment/views_handler_field_comment_link_delete.inc
76 files[] = modules/comment/views_handler_field_comment_link_edit.inc
77 files[] = modules/comment/views_handler_field_comment_link_reply.inc
78 files[] = modules/comment/views_handler_field_comment_node_link.inc
79 files[] = modules/comment/views_handler_field_comment_username.inc
80 files[] = modules/comment/views_handler_field_ncs_last_comment_name.inc
81 files[] = modules/comment/views_handler_field_ncs_last_updated.inc
82 files[] = modules/comment/views_handler_field_node_comment.inc
83 files[] = modules/comment/views_handler_field_node_new_comments.inc
84 files[] = modules/comment/views_handler_field_last_comment_timestamp.inc
85 files[] = modules/comment/views_handler_filter_comment_user_uid.inc
86 files[] = modules/comment/views_handler_filter_ncs_last_updated.inc
87 files[] = modules/comment/views_handler_filter_node_comment.inc
88 files[] = modules/comment/views_handler_sort_comment_thread.inc
89 files[] = modules/comment/views_handler_sort_ncs_last_comment_name.inc
90 files[] = modules/comment/views_handler_sort_ncs_last_updated.inc
91 files[] = modules/comment/views_plugin_row_comment_rss.inc
92 files[] = modules/comment/views_plugin_row_comment_view.inc
93 files[] = modules/contact/views_handler_field_contact_link.inc
94 files[] = modules/field/views_handler_field_field.inc
95 files[] = modules/field/views_handler_relationship_entity_reverse.inc
96 files[] = modules/field/views_handler_argument_field_list.inc
97 files[] = modules/field/views_handler_filter_field_list.inc
98 files[] = modules/filter/views_handler_field_filter_format_name.inc
99 files[] = modules/locale/views_handler_argument_locale_group.inc
100 files[] = modules/locale/views_handler_argument_locale_language.inc
101 files[] = modules/locale/views_handler_field_locale_group.inc
102 files[] = modules/locale/views_handler_field_locale_language.inc
103 files[] = modules/locale/views_handler_field_locale_link_edit.inc
104 files[] = modules/locale/views_handler_filter_locale_group.inc
105 files[] = modules/locale/views_handler_filter_locale_language.inc
106 files[] = modules/locale/views_handler_filter_locale_version.inc
107 files[] = modules/node/views_handler_argument_dates_various.inc
108 files[] = modules/node/views_handler_argument_node_language.inc
109 files[] = modules/node/views_handler_argument_node_nid.inc
110 files[] = modules/node/views_handler_argument_node_type.inc
111 files[] = modules/node/views_handler_argument_node_vid.inc
112 files[] = modules/node/views_handler_argument_node_uid_revision.inc
113 files[] = modules/node/views_handler_field_history_user_timestamp.inc
114 files[] = modules/node/views_handler_field_node.inc
115 files[] = modules/node/views_handler_field_node_link.inc
116 files[] = modules/node/views_handler_field_node_link_delete.inc
117 files[] = modules/node/views_handler_field_node_link_edit.inc
118 files[] = modules/node/views_handler_field_node_revision.inc
119 files[] = modules/node/views_handler_field_node_revision_link_delete.inc
120 files[] = modules/node/views_handler_field_node_revision_link_revert.inc
121 files[] = modules/node/views_handler_field_node_path.inc
122 files[] = modules/node/views_handler_field_node_type.inc
123 files[] = modules/node/views_handler_filter_history_user_timestamp.inc
124 files[] = modules/node/views_handler_filter_node_access.inc
125 files[] = modules/node/views_handler_filter_node_status.inc
126 files[] = modules/node/views_handler_filter_node_type.inc
127 files[] = modules/node/views_handler_filter_node_uid_revision.inc
128 files[] = modules/node/views_plugin_argument_default_node.inc
129 files[] = modules/node/views_plugin_argument_validate_node.inc
130 files[] = modules/node/views_plugin_row_node_rss.inc
131 files[] = modules/node/views_plugin_row_node_view.inc
132 files[] = modules/profile/views_handler_field_profile_date.inc
133 files[] = modules/profile/views_handler_field_profile_list.inc
134 files[] = modules/profile/views_handler_filter_profile_selection.inc
135 files[] = modules/search/views_handler_argument_search.inc
136 files[] = modules/search/views_handler_field_search_score.inc
137 files[] = modules/search/views_handler_filter_search.inc
138 files[] = modules/search/views_handler_sort_search_score.inc
139 files[] = modules/search/views_plugin_row_search_view.inc
140 files[] = modules/statistics/views_handler_field_accesslog_path.inc
141 files[] = modules/system/views_handler_argument_file_fid.inc
142 files[] = modules/system/views_handler_field_file.inc
143 files[] = modules/system/views_handler_field_file_extension.inc
144 files[] = modules/system/views_handler_field_file_filemime.inc
145 files[] = modules/system/views_handler_field_file_uri.inc
146 files[] = modules/system/views_handler_field_file_status.inc
147 files[] = modules/system/views_handler_filter_file_status.inc
148 files[] = modules/taxonomy/views_handler_argument_taxonomy.inc
149 files[] = modules/taxonomy/views_handler_argument_term_node_tid.inc
150 files[] = modules/taxonomy/views_handler_argument_term_node_tid_depth.inc
151 files[] = modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc
152 files[] = modules/taxonomy/views_handler_argument_vocabulary_vid.inc
153 files[] = modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc
154 files[] = modules/taxonomy/views_handler_field_taxonomy.inc
155 files[] = modules/taxonomy/views_handler_field_term_node_tid.inc
156 files[] = modules/taxonomy/views_handler_field_term_link_edit.inc
157 files[] = modules/taxonomy/views_handler_filter_term_node_tid.inc
158 files[] = modules/taxonomy/views_handler_filter_term_node_tid_depth.inc
159 files[] = modules/taxonomy/views_handler_filter_vocabulary_vid.inc
160 files[] = modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc
161 files[] = modules/taxonomy/views_handler_relationship_node_term_data.inc
162 files[] = modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc
163 files[] = modules/taxonomy/views_plugin_argument_default_taxonomy_tid.inc
164 ;files[] = modules/translation/views_handler_argument_node_language.inc
165 files[] = modules/system/views_handler_filter_system_type.inc
166 files[] = modules/translation/views_handler_argument_node_tnid.inc
167 files[] = modules/translation/views_handler_field_node_language.inc
168 files[] = modules/translation/views_handler_field_node_link_translate.inc
169 files[] = modules/translation/views_handler_field_node_translation_link.inc
170 files[] = modules/translation/views_handler_filter_node_language.inc
171 files[] = modules/translation/views_handler_filter_node_tnid.inc
172 files[] = modules/translation/views_handler_filter_node_tnid_child.inc
173 files[] = modules/translation/views_handler_relationship_translation.inc
174 files[] = modules/upload/views_handler_field_upload_description.inc
175 files[] = modules/upload/views_handler_field_upload_fid.inc
176 files[] = modules/upload/views_handler_filter_upload_fid.inc
177 files[] = modules/user/views_handler_argument_user_uid.inc
178 files[] = modules/user/views_handler_argument_users_roles_rid.inc
179 files[] = modules/user/views_handler_field_user.inc
180 files[] = modules/user/views_handler_field_user_language.inc
181 files[] = modules/user/views_handler_field_user_link.inc
182 files[] = modules/user/views_handler_field_user_link_cancel.inc
183 files[] = modules/user/views_handler_field_user_link_edit.inc
184 files[] = modules/user/views_handler_field_user_mail.inc
185 files[] = modules/user/views_handler_field_user_name.inc
186 files[] = modules/user/views_handler_field_user_permissions.inc
187 files[] = modules/user/views_handler_field_user_picture.inc
188 files[] = modules/user/views_handler_field_user_roles.inc
189 files[] = modules/user/views_handler_filter_user_current.inc
190 files[] = modules/user/views_handler_filter_user_name.inc
191 files[] = modules/user/views_handler_filter_user_permissions.inc
192 files[] = modules/user/views_handler_filter_user_roles.inc
193 files[] = modules/user/views_plugin_argument_default_current_user.inc
194 files[] = modules/user/views_plugin_argument_default_user.inc
195 files[] = modules/user/views_plugin_argument_validate_user.inc
196 ; Plugins
197 files[] = plugins/views_plugin_access.inc
198 files[] = plugins/views_plugin_access_none.inc
199 files[] = plugins/views_plugin_access_perm.inc
200 files[] = plugins/views_plugin_access_role.inc
201 files[] = plugins/views_plugin_argument_default.inc
202 files[] = plugins/views_plugin_argument_default_php.inc
203 files[] = plugins/views_plugin_argument_default_fixed.inc
204 files[] = plugins/views_plugin_argument_default_raw.inc
205 files[] = plugins/views_plugin_argument_validate.inc
206 files[] = plugins/views_plugin_argument_validate_numeric.inc
207 files[] = plugins/views_plugin_argument_validate_php.inc
208 files[] = plugins/views_plugin_cache.inc
209 files[] = plugins/views_plugin_cache_none.inc
210 files[] = plugins/views_plugin_cache_time.inc
211 files[] = plugins/views_plugin_display.inc
212 files[] = plugins/views_plugin_display_attachment.inc
213 files[] = plugins/views_plugin_display_block.inc
214 files[] = plugins/views_plugin_display_default.inc
215 files[] = plugins/views_plugin_display_extender.inc
216 files[] = plugins/views_plugin_display_feed.inc
217 files[] = plugins/views_plugin_exposed_form_basic.inc
218 files[] = plugins/views_plugin_exposed_form.inc
219 files[] = plugins/views_plugin_exposed_form_input_required.inc
220 files[] = plugins/views_plugin_display_page.inc
221 files[] = plugins/views_plugin_localization_core.inc
222 files[] = plugins/views_plugin_localization.inc
223 files[] = plugins/views_plugin_localization_none.inc
224 files[] = plugins/views_plugin_pager.inc
225 files[] = plugins/views_plugin_pager_full.inc
226 files[] = plugins/views_plugin_pager_mini.inc
227 files[] = plugins/views_plugin_pager_none.inc
228 files[] = plugins/views_plugin_pager_some.inc
229 files[] = plugins/views_plugin_query.inc
230 files[] = plugins/views_plugin_query_default.inc
231 files[] = plugins/views_plugin_row.inc
232 files[] = plugins/views_plugin_row_fields.inc
233 files[] = plugins/views_plugin_style.inc
234 files[] = plugins/views_plugin_style_default.inc
235 files[] = plugins/views_plugin_style_grid.inc
236 files[] = plugins/views_plugin_style_list.inc
237 files[] = plugins/views_plugin_style_jump_menu.inc
238 files[] = plugins/views_plugin_style_rss.inc
239 files[] = plugins/views_plugin_style_summary.inc
240 files[] = plugins/views_plugin_style_summary_jump_menu.inc
241 files[] = plugins/views_plugin_style_summary_unformatted.inc
242 files[] = plugins/views_plugin_style_table.inc
243
244 ; Tests
245 files[] = tests/handlers/views_handler_area_text.test
246 files[] = tests/handlers/views_handler_argument_null.test
247 files[] = tests/handlers/views_handler_field_boolean.test
248 files[] = tests/handlers/views_handler_field_custom.test
249 files[] = tests/handlers/views_handler_field_counter.test
250 files[] = tests/handlers/views_handler_field_date.test
251 files[] = tests/handlers/views_handler_field_file_size.test
252 files[] = tests/handlers/views_handler_field_math.test
253 files[] = tests/handlers/views_handler_field_url.test
254 files[] = tests/handlers/views_handler_field_xss.test
255 files[] = tests/handlers/views_handler_filter_date.test
256 files[] = tests/handlers/views_handler_filter_equality.test
257 files[] = tests/handlers/views_handler_filter_in_operator.test
258 files[] = tests/handlers/views_handler_filter_numeric.test
259 files[] = tests/handlers/views_handler_filter_string.test
260 files[] = tests/handlers/views_handler_sort_random.test
261 files[] = tests/handlers/views_handler_sort_date.test
262 files[] = tests/handlers/views_handler_sort.test
263 files[] = tests/test_plugins/views_test_plugin_access_test_dynamic.inc
264 files[] = tests/test_plugins/views_test_plugin_access_test_static.inc
265 files[] = tests/styles/views_plugin_style_jump_menu.test
266 files[] = tests/styles/views_plugin_style.test
267 files[] = tests/views_access.test
268 files[] = tests/views_analyze.test
269 files[] = tests/views_basic.test
270 files[] = tests/views_argument_default.test
271 files[] = tests/views_argument_validator.test
272 files[] = tests/views_exposed_form.test
273 files[] = tests/views_glossary.test
274 files[] = tests/views_groupby.test
275 files[] = tests/views_handlers.test
276 files[] = tests/views_module.test
277 files[] = tests/views_pager.test
278 files[] = tests/views_plugin_localization_test.inc
279 files[] = tests/views_translatable.test
280 files[] = tests/views_query.test
281 files[] = tests/views_upgrade.test
282 files[] = tests/views_test.views_default.inc
283 files[] = tests/comment/views_handler_argument_comment_user_uid.test
284 files[] = tests/comment/views_handler_filter_comment_user_uid.test
285 files[] = tests/user/views_user_argument_default.test
286 files[] = tests/user/views_user_argument_validate.test
287 files[] = tests/user/views_user.test
288 files[] = tests/views_cache.test
289 files[] = tests/views_view.test
290 files[] = tests/views_ui.test
Sick, eh?
Disclaimer: Probably this does not work for the "tests" stuff, because drupal.org testbot does not have xautoload installed.
Comments
Wow! awesome module. I
Wow! awesome module. I thought that xautoload required a certain directory naming convention like PSR-0, but this is much better.
I would still recommend that
I would still recommend that you use PSR-0 or PSR-4, so that it is more predictable where your classes are defined.
Arbitrariness is the enemy!