jsduck 2.0.pre4 → 3.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +126 -34
- data/Rakefile +343 -115
- data/bin/jsduck +4 -196
- data/example.js +144 -0
- data/jsduck.gemspec +4 -9
- data/lib/jsduck/aggregator.rb +1 -1
- data/lib/jsduck/app.rb +165 -182
- data/lib/jsduck/categories.rb +17 -2
- data/lib/jsduck/class.rb +10 -0
- data/lib/jsduck/class_formatter.rb +77 -0
- data/lib/jsduck/doc_formatter.rb +42 -4
- data/lib/jsduck/doc_parser.rb +64 -10
- data/lib/jsduck/examples.rb +33 -0
- data/lib/jsduck/exporter.rb +18 -42
- data/lib/jsduck/guides.rb +41 -74
- data/lib/jsduck/icons.rb +28 -0
- data/lib/jsduck/js_literal_builder.rb +21 -0
- data/lib/jsduck/js_literal_parser.rb +106 -0
- data/lib/jsduck/js_parser.rb +115 -97
- data/lib/jsduck/json_duck.rb +45 -0
- data/lib/jsduck/lexer.rb +55 -25
- data/lib/jsduck/lint.rb +84 -0
- data/lib/jsduck/merger.rb +91 -21
- data/lib/jsduck/options.rb +320 -0
- data/lib/jsduck/relations.rb +7 -1
- data/lib/jsduck/renderer.rb +315 -0
- data/lib/jsduck/source_writer.rb +2 -2
- data/lib/jsduck/type_parser.rb +85 -0
- data/lib/jsduck/videos.rb +33 -0
- data/lib/jsduck/welcome.rb +21 -0
- data/{template → template-min}/README.md +0 -0
- data/template-min/app.js +1 -0
- data/template-min/build-js.html +25 -0
- data/template-min/egIframe.html +24 -0
- data/template-min/extjs/bootstrap.js +73 -0
- data/template-min/extjs/ext-all-debug.js +90047 -0
- data/{template → template-min}/extjs/ext-all.js +0 -0
- data/template-min/extjs/resources/css/ext-all.css +1 -0
- data/template-min/extjs/resources/themes/images/default/boundlist/trigger-arrow.png +0 -0
- data/template-min/extjs/resources/themes/images/default/box/corners-blue.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/box/corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/box/l-blue.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/box/l.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/box/r-blue.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/box/r.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/box/tb-blue.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/box/tb.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-disabled-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-disabled-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-disabled-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-disabled-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-disabled-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-disabled-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-notitle-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-notitle-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/arrow.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/btn.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/group-cs.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/group-lr.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/group-tb.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/s-arrow-b-noline.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/s-arrow-b.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/s-arrow-bo.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/s-arrow-light.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/s-arrow-noline.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/s-arrow-o.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/button/s-arrow.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-footer-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-footer-bg.png +0 -0
- data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-header-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-header-bg.png +0 -0
- data/template-min/extjs/resources/themes/images/default/dd/drop-add.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/dd/drop-no.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/dd/drop-yes.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/editor/tb-sprite.gif +0 -0
- data/{template → template-min}/extjs/resources/themes/images/default/form/checkbox.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/clear-trigger.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/date-trigger.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/error-tip-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/exclamation.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/radio.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/search-trigger.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/spinner-small.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/spinner.gif +0 -0
- data/{template → template-min}/extjs/resources/themes/images/default/form/text-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/trigger-square.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/trigger-tpl.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form/trigger.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-default-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-default-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/arrow-left-white.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/arrow-right-white.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/cell-special-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/cell-special-bg.png +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/cell-special-selected-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/cell-special-selected-bg.png +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/checked.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/col-move-bottom.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/col-move-top.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/column-header-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/column-header-bg.png +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/column-header-over-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/column-header-over-bg.png +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/columns.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-left.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-left.png +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-right.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-right.png +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/dirty.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/done.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/drop-no.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/drop-yes.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/footer-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid-blue-hd.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid-blue-split.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid-hrow.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid-loading.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid-split.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid-vista-hd.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid3-hd-btn.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid3-hrow-over.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid3-hrow.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/grid3-rowheader.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/group-by.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/group-collapse.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/group-expand-sprite.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/group-expand.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/hd-pop.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/hmenu-asc.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/hmenu-desc.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/hmenu-lock.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/hmenu-lock.png +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/hmenu-unlock.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/hmenu-unlock.png +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/invalid_line.gif +0 -0
- data/{template → template-min}/extjs/resources/themes/images/default/grid/loading.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/mso-hd.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/nowait.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/page-first-disabled.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/page-first.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/page-last-disabled.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/page-last.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/page-next-disabled.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/page-next.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/page-prev-disabled.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/page-prev.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/pick-button.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/property-cell-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/property-cell-selected-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/refresh-disabled.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/refresh.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/row-check-sprite.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/row-expand-sprite.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/row-over.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/row-sel.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/sort-hd.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/sort_asc.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/sort_desc.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/unchecked.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/grid/wait.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/layout/mini-bottom.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/layout/mini-left.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/layout/mini-right.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/layout/mini-top.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/menu/checked.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/menu/group-checked.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/menu/item-over.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/menu/menu-parent.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/menu/menu.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/menu/unchecked.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel/panel-default-framed-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel/panel-default-framed-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-bottom-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-left-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-right-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-top-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/progress/progress-default-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/blue-loading.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/calendar.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/glass-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/hd-sprite.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/icon-error.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/icon-info.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/icon-question.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/icon-warning.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/large-loading.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/left-btn.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/loading-balls.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/right-btn.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/shadow-c.png +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/shadow-lr.png +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/shadow.png +0 -0
- data/template-min/extjs/resources/themes/images/default/shared/warning.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/e-handle-dark.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/e-handle.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/ne-handle-dark.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/ne-handle.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/nw-handle-dark.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/nw-handle.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/s-handle-dark.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/s-handle.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/se-handle-dark.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/se-handle.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/square.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/sw-handle-dark.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/sizer/sw-handle.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/slider/slider-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/slider/slider-bg.png +0 -0
- data/template-min/extjs/resources/themes/images/default/slider/slider-thumb.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/slider/slider-thumb.png +0 -0
- data/template-min/extjs/resources/themes/images/default/slider/slider-v-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/slider/slider-v-bg.png +0 -0
- data/template-min/extjs/resources/themes/images/default/slider/slider-v-thumb.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/slider/slider-v-thumb.png +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-close.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab-bar/scroll-left.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab-bar/scroll-right.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tab-bar/tab-bar-default-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tip/tip-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tip/tip-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/toolbar/more.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/toolbar/scroll-left.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/toolbar/scroll-right.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/toolbar/toolbar-default-bg.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tools/tool-sprite-tpl.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tools/tool-sprites.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tools/tools-sprites-trans.gif +0 -0
- data/{template → template-min}/extjs/resources/themes/images/default/tree/arrows.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/drop-above.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/drop-add.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/drop-append.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/drop-below.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/drop-between.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/drop-no.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/drop-over.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/drop-under.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/drop-yes.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow-end-minus-nl.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow-end-minus.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow-end-plus-nl.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow-end-plus.gif +0 -0
- data/{template/resources/images → template-min/extjs/resources/themes/images/default/tree}/elbow-end.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow-line.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow-minus-nl.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow-minus.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow-plus-nl.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow-plus.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/elbow.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/folder-open.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/folder.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/leaf.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/loading.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/tree/s.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/util/splitter/mini-bottom.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/util/splitter/mini-left.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/util/splitter/mini-right.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/util/splitter/mini-top.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window/window-default-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window/window-default-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-bottom-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-bottom-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-left-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-left-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-right-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-right-sides.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-top-corners.gif +0 -0
- data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-top-sides.gif +0 -0
- data/{template → template-min}/favicon.ico +0 -0
- data/template-min/index.php +59 -0
- data/template-min/print-template.html +22 -0
- data/template-min/resources/css/app.css +1 -0
- data/template-min/resources/images/arrows.png +0 -0
- data/{template → template-min}/resources/images/class-m.png +0 -0
- data/{template → template-min}/resources/images/class-sm.png +0 -0
- data/{template → template-min}/resources/images/component-m.png +0 -0
- data/{template → template-min}/resources/images/configs.png +0 -0
- data/{template → template-min}/resources/images/doc-m.png +0 -0
- data/template-min/resources/images/elbow-end.gif +0 -0
- data/{template → template-min}/resources/images/events.png +0 -0
- data/template-min/resources/images/example-icons.png +0 -0
- data/{template → template-min}/resources/images/expandcollapse.png +0 -0
- data/{template → template-min}/resources/images/guide-icon.png +0 -0
- data/{template → template-min}/resources/images/guides.png +0 -0
- data/template-min/resources/images/header.png +0 -0
- data/template-min/resources/images/hero-extjs4-alt.png +0 -0
- data/template-min/resources/images/icons.png +0 -0
- data/template-min/resources/images/link-green-standard-over.png +0 -0
- data/template-min/resources/images/link-green-standard.png +0 -0
- data/{template → template-min}/resources/images/loading-title.png +0 -0
- data/{template → template-min}/resources/images/loading.gif +0 -0
- data/template-min/resources/images/logo-screen-noglow.png +0 -0
- data/template-min/resources/images/logo.png +0 -0
- data/{template → template-min}/resources/images/member-collapsed.gif +0 -0
- data/{template → template-min}/resources/images/member-expanded.gif +0 -0
- data/{template → template-min}/resources/images/member-hover.gif +0 -0
- data/{template → template-min}/resources/images/methods.png +0 -0
- data/template-min/resources/images/more.png +0 -0
- data/template-min/resources/images/preview.png +0 -0
- data/template-min/resources/images/print.png +0 -0
- data/{template → template-min}/resources/images/properties.png +0 -0
- data/template-min/resources/images/search-box.png +0 -0
- data/{template → template-min}/resources/images/singleton-m.png +0 -0
- data/template-min/resources/images/tabs.png +0 -0
- data/{template → template-min}/resources/images/version-tabs.png +0 -0
- data/template-min/resources/images/welcome-bg-js4.gif +0 -0
- data/{template → template-min}/resources/images/x.png +0 -0
- data/{template → template-min}/resources/images/x12.png +0 -0
- data/template-min/resources/images/x122.png +0 -0
- data/{template/index.html → template-min/template.html} +9 -14
- data/template-min/welcome.html +78 -0
- metadata +429 -76
- data/lib/jsduck/jsonp.rb +0 -17
- data/lib/jsduck/tree.rb +0 -117
- data/lib/jsduck/tree_icons.rb +0 -19
- data/template/app/Application.js +0 -53
- data/template/app/Favorites.js +0 -88
- data/template/app/History.js +0 -45
- data/template/app/LocalStore.js +0 -45
- data/template/app/Settings.js +0 -39
- data/template/app/Syntax.js +0 -20
- data/template/app/controller/Classes.js +0 -301
- data/template/app/controller/Search.js +0 -189
- data/template/app/model/Favorite.js +0 -11
- data/template/app/model/Setting.js +0 -11
- data/template/app/store/Favorites.js +0 -7
- data/template/app/store/Search.js +0 -14
- data/template/app/store/Settings.js +0 -7
- data/template/app/view/ClassGrid.js +0 -114
- data/template/app/view/HoverMenu.js +0 -59
- data/template/app/view/HoverMenuButton.js +0 -147
- data/template/app/view/Viewport.js +0 -240
- data/template/app/view/cls/Header.js +0 -47
- data/template/app/view/cls/Overview.js +0 -415
- data/template/app/view/cls/Toolbar.js +0 -199
- data/template/app/view/index/Container.js +0 -62
- data/template/app/view/search/Dropdown.js +0 -115
- data/template/app/view/tree/Tree.js +0 -143
- data/template/app.js +0 -25
- data/template/prettify/prettify.css +0 -1
- data/template/prettify/prettify.js +0 -28
- data/template/resources/css/docs-ext.css +0 -3594
- data/template/resources/css/reset.css +0 -59
- data/template/resources/css/scrollbars.css +0 -14
- data/template/resources/css/viewport.css +0 -420
- data/template/resources/images/data-package.png +0 -0
- data/template/resources/images/drag-bar-center.png +0 -0
- data/template/resources/images/headBG.png +0 -0
- data/template/resources/images/header.gif +0 -0
- data/template/resources/images/icon.png +0 -0
- data/template/resources/images/icons.png +0 -0
- data/template/resources/images/model.png +0 -0
- data/template/resources/images/root-lines.png +0 -0
- data/template/resources/images/search-box.png +0 -0
data/lib/jsduck/js_parser.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'jsduck/lexer'
|
2
2
|
require 'jsduck/doc_parser'
|
3
|
+
require 'jsduck/js_literal_parser'
|
4
|
+
require 'jsduck/js_literal_builder'
|
3
5
|
|
4
6
|
module JsDuck
|
5
7
|
|
6
|
-
class JsParser
|
8
|
+
class JsParser < JsLiteralParser
|
7
9
|
def initialize(input)
|
8
|
-
|
10
|
+
super(input)
|
9
11
|
@doc_parser = DocParser.new
|
10
12
|
@docs = []
|
11
13
|
end
|
@@ -86,7 +88,7 @@ module JsDuck
|
|
86
88
|
elsif look(:ident) || look("this")
|
87
89
|
maybe_assignment
|
88
90
|
elsif look(:string)
|
89
|
-
{:type => :assignment, :left => [match(:string)]}
|
91
|
+
{:type => :assignment, :left => [match(:string)[:value]]}
|
90
92
|
else
|
91
93
|
{:type => :nop}
|
92
94
|
end
|
@@ -97,7 +99,7 @@ module JsDuck
|
|
97
99
|
match("function")
|
98
100
|
return {
|
99
101
|
:type => :function,
|
100
|
-
:name => look(:ident) ? match(:ident) : nil,
|
102
|
+
:name => look(:ident) ? match(:ident)[:value] : nil,
|
101
103
|
:params => function_parameters,
|
102
104
|
:body => function_body,
|
103
105
|
}
|
@@ -106,9 +108,9 @@ module JsDuck
|
|
106
108
|
# <function-parameters> := "(" [ <ident> [ "," <ident> ]* ] ")"
|
107
109
|
def function_parameters
|
108
110
|
match("(")
|
109
|
-
params = look(:ident) ? [{:name => match(:ident)}] : []
|
111
|
+
params = look(:ident) ? [{:name => match(:ident)[:value]}] : []
|
110
112
|
while look(",", :ident) do
|
111
|
-
params << {:name => match(",", :ident)}
|
113
|
+
params << {:name => match(",", :ident)[:value]}
|
112
114
|
end
|
113
115
|
match(")")
|
114
116
|
return params
|
@@ -142,33 +144,52 @@ module JsDuck
|
|
142
144
|
# <ident-chain> := [ "this" | <ident> ] [ "." <ident> ]*
|
143
145
|
def ident_chain
|
144
146
|
if look("this")
|
145
|
-
chain = [match("this")]
|
147
|
+
chain = [match("this")[:value]]
|
146
148
|
else
|
147
|
-
chain = [match(:ident)]
|
149
|
+
chain = [match(:ident)[:value]]
|
148
150
|
end
|
149
151
|
|
150
152
|
while look(".", :ident) do
|
151
|
-
chain << match(".", :ident)
|
153
|
+
chain << match(".", :ident)[:value]
|
152
154
|
end
|
153
155
|
return chain
|
154
156
|
end
|
155
157
|
|
156
158
|
# <expression> := <function> | <ext-extend> | <literal>
|
157
|
-
# <literal> := <string> | <boolean> | <number> | <regex>
|
158
159
|
def expression
|
159
160
|
if look("function")
|
160
161
|
function
|
161
162
|
elsif look("Ext", ".", "extend")
|
162
163
|
ext_extend
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
164
|
+
else
|
165
|
+
my_literal
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# <literal> := ...see JsLiteralParser...
|
170
|
+
def my_literal
|
171
|
+
lit = literal
|
172
|
+
return unless lit
|
173
|
+
|
174
|
+
cls_map = {
|
175
|
+
:string => "String",
|
176
|
+
:number => "Number",
|
177
|
+
:regex => "RegExp",
|
178
|
+
:array => "Array",
|
179
|
+
:object => "Object",
|
180
|
+
}
|
181
|
+
|
182
|
+
if cls_map[lit[:type]]
|
183
|
+
cls = cls_map[lit[:type]]
|
184
|
+
elsif lit[:type] == :ident && (lit[:value] == "true" || lit[:value] == "false")
|
185
|
+
cls = "Boolean"
|
186
|
+
else
|
187
|
+
cls = nil
|
171
188
|
end
|
189
|
+
|
190
|
+
value = JsLiteralBuilder.new.to_s(lit)
|
191
|
+
|
192
|
+
{:type => :literal, :class => cls, :value => value}
|
172
193
|
end
|
173
194
|
|
174
195
|
# <ext-extend> := "Ext" "." "extend" "(" <ident-chain> "," ...
|
@@ -184,7 +205,7 @@ module JsDuck
|
|
184
205
|
def ext_define
|
185
206
|
match("Ext", ".");
|
186
207
|
look("define") ? match("define") : match("ClassManager", ".", "create");
|
187
|
-
name = match("(", :string)
|
208
|
+
name = match("(", :string)[:value]
|
188
209
|
|
189
210
|
if look(",", "{")
|
190
211
|
match(",")
|
@@ -199,103 +220,115 @@ module JsDuck
|
|
199
220
|
cfg
|
200
221
|
end
|
201
222
|
|
202
|
-
# <ext-define-cfg> := "{" ( <extend> | <mixins> | <alternate-class-name> | <alias> |
|
223
|
+
# <ext-define-cfg> := "{" ( <extend> | <mixins> | <alternate-class-name> | <alias> |
|
224
|
+
# <requires> | <uses> | <singleton> | <?> )*
|
203
225
|
def ext_define_cfg
|
204
226
|
match("{")
|
205
227
|
cfg = {}
|
206
228
|
found = true
|
207
229
|
while found
|
208
230
|
found = false
|
209
|
-
if
|
210
|
-
cfg[:extend] =
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
elsif
|
216
|
-
cfg[:
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
elsif
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
look("null") || look("undefined")
|
226
|
-
# Some key with literal value -- ignore
|
227
|
-
@lex.next
|
228
|
-
found = true
|
229
|
-
elsif look("[")
|
230
|
-
# Some key with array of strings -- ignore
|
231
|
-
found = array_of_strings
|
232
|
-
end
|
231
|
+
if found = ext_define_extend
|
232
|
+
cfg[:extend] = found
|
233
|
+
elsif found = ext_define_mixins
|
234
|
+
cfg[:mixins] = found
|
235
|
+
elsif found = ext_define_alternate_class_name
|
236
|
+
cfg[:alternateClassNames] = found
|
237
|
+
elsif found = ext_define_alias
|
238
|
+
cfg[:alias] = found
|
239
|
+
elsif found = ext_define_requires
|
240
|
+
cfg[:requires] = found
|
241
|
+
elsif found = ext_define_uses
|
242
|
+
cfg[:uses] = found
|
243
|
+
elsif found = ext_define_singleton
|
244
|
+
cfg[:singleton] = found
|
245
|
+
elsif found = ext_define_whatever
|
246
|
+
# ignore this
|
233
247
|
end
|
234
248
|
match(",") if look(",")
|
235
249
|
end
|
236
250
|
cfg
|
237
251
|
end
|
238
252
|
|
239
|
-
# <
|
253
|
+
# <extend> := "extend" ":" <string>
|
240
254
|
def ext_define_extend
|
241
|
-
|
255
|
+
if look("extend", ":", :string)
|
256
|
+
match("extend", ":", :string)[:value]
|
257
|
+
end
|
242
258
|
end
|
243
259
|
|
244
|
-
# <
|
245
|
-
def
|
246
|
-
|
247
|
-
|
260
|
+
# <mixins> := "mixins" ":" <object-literal>
|
261
|
+
def ext_define_mixins
|
262
|
+
if look("mixins", ":", "{")
|
263
|
+
match("mixins", ":")
|
264
|
+
lit = literal
|
265
|
+
lit && lit[:value].map {|x| x[:value][:value] }
|
266
|
+
end
|
248
267
|
end
|
249
268
|
|
250
|
-
# <
|
269
|
+
# <alternate-class-name> := "alternateClassName" ":" <string-or-list>
|
270
|
+
def ext_define_alternate_class_name
|
271
|
+
if look("alternateClassName", ":")
|
272
|
+
match("alternateClassName", ":")
|
273
|
+
string_or_list
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
# <alias> := "alias" ":" <string-or-list>
|
251
278
|
def ext_define_alias
|
252
|
-
|
253
|
-
|
279
|
+
if look("alias", ":")
|
280
|
+
match("alias", ":")
|
281
|
+
string_or_list
|
282
|
+
end
|
254
283
|
end
|
255
284
|
|
256
|
-
# <
|
257
|
-
def
|
258
|
-
if look(:
|
259
|
-
|
260
|
-
|
261
|
-
array_of_strings
|
262
|
-
else
|
263
|
-
[]
|
285
|
+
# <requires> := "requires" ":" <string-or-list>
|
286
|
+
def ext_define_requires
|
287
|
+
if look("requires", ":")
|
288
|
+
match("requires", ":")
|
289
|
+
string_or_list
|
264
290
|
end
|
265
291
|
end
|
266
292
|
|
267
|
-
# <
|
268
|
-
def
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
mixins << match(:ident, ":", :string)
|
273
|
-
match(",") if look(",")
|
293
|
+
# <uses> := "uses" ":" <string-or-list>
|
294
|
+
def ext_define_uses
|
295
|
+
if look("uses", ":")
|
296
|
+
match("uses", ":")
|
297
|
+
string_or_list
|
274
298
|
end
|
275
|
-
match("}") if look("}")
|
276
|
-
mixins
|
277
299
|
end
|
278
300
|
|
279
|
-
# <
|
280
|
-
def
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
strs << match(:string)
|
285
|
-
match(",") if look(",")
|
301
|
+
# <singleton> := "singleton" ":" "true"
|
302
|
+
def ext_define_singleton
|
303
|
+
if look("singleton", ":", "true")
|
304
|
+
match("singleton", ":", "true")
|
305
|
+
true
|
286
306
|
end
|
307
|
+
end
|
287
308
|
|
288
|
-
|
289
|
-
|
290
|
-
|
309
|
+
# <?> := <ident> ":" <literal>
|
310
|
+
def ext_define_whatever
|
311
|
+
if look(:ident, ":")
|
312
|
+
match(:ident, ":")
|
313
|
+
literal
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
# <string-or-list> := ( <string> | <array-literal> )
|
318
|
+
def string_or_list
|
319
|
+
lit = literal
|
320
|
+
if lit && lit[:type] == :string
|
321
|
+
[ lit[:value] ]
|
322
|
+
elsif lit && lit[:type] == :array
|
323
|
+
lit[:value].map {|x| x[:value] }
|
291
324
|
else
|
292
|
-
|
325
|
+
[]
|
293
326
|
end
|
294
327
|
end
|
295
328
|
|
296
329
|
# <property-literal> := ( <ident> | <string> ) ":" <expression>
|
297
330
|
def property_literal
|
298
|
-
left = look(:ident) ? match(:ident) : match(:string)
|
331
|
+
left = look(:ident) ? match(:ident)[:value] : match(:string)[:value]
|
299
332
|
match(":")
|
300
333
|
right = expression
|
301
334
|
return {
|
@@ -305,21 +338,6 @@ module JsDuck
|
|
305
338
|
}
|
306
339
|
end
|
307
340
|
|
308
|
-
# Matches all arguments, returns the value of last match
|
309
|
-
# When the whole sequence doesn't match, throws exception
|
310
|
-
def match(*args)
|
311
|
-
if look(*args)
|
312
|
-
last = nil
|
313
|
-
args.length.times { last = @lex.next }
|
314
|
-
last
|
315
|
-
else
|
316
|
-
throw "Expected: " + args.join(", ")
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
def look(*args)
|
321
|
-
@lex.look(*args)
|
322
|
-
end
|
323
341
|
end
|
324
342
|
|
325
343
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module JsDuck
|
4
|
+
|
5
|
+
# Wrapper around the json gem for use in JsDuck.
|
6
|
+
#
|
7
|
+
# The main benefit of it is that we have a central place for
|
8
|
+
# controlling how the JSON is created (pretty-formatted or not).
|
9
|
+
class JsonDuck
|
10
|
+
@@pretty = false
|
11
|
+
|
12
|
+
# Set to true to turn on pretty-formatting of JSON
|
13
|
+
def self.pretty=(pretty)
|
14
|
+
@@pretty = pretty
|
15
|
+
end
|
16
|
+
|
17
|
+
# Turns object into JSON, places it inside JavaScript that calls the
|
18
|
+
# given callback name, and writes the result to file.
|
19
|
+
def self.write_jsonp(filename, callback_name, data)
|
20
|
+
jsonp = "Ext.data.JsonP." + callback_name + "(" + self.generate(data) + ");"
|
21
|
+
File.open(filename, 'w') {|f| f.write(jsonp) }
|
22
|
+
end
|
23
|
+
|
24
|
+
# Turns object into JSON and writes inside a file
|
25
|
+
def self.write_json(filename, data)
|
26
|
+
File.open(filename, 'w') {|f| f.write(self.generate(data)) }
|
27
|
+
end
|
28
|
+
|
29
|
+
# Generates JSON from object
|
30
|
+
def self.generate(data)
|
31
|
+
@@pretty ? JSON.pretty_generate(data) : JSON.generate(data)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Reads and parses JSON from file
|
35
|
+
def self.read(filename)
|
36
|
+
self.parse(IO.read(filename))
|
37
|
+
end
|
38
|
+
|
39
|
+
# Parses JSON string
|
40
|
+
def self.parse(string)
|
41
|
+
JSON.parse(string)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/lib/jsduck/lexer.rb
CHANGED
@@ -19,9 +19,15 @@ module JsDuck
|
|
19
19
|
# comments are ignored just as whitespace.
|
20
20
|
#
|
21
21
|
class Lexer
|
22
|
+
# Input can be either a String or StringScanner.
|
23
|
+
#
|
24
|
+
# In the latter case we ensure that only #next will advance the
|
25
|
+
# scanpointer of StringScanner - this allows context-switching
|
26
|
+
# while parsing some string. Specifically we need this feature to
|
27
|
+
# parse some JavaScript inside doc-comments.
|
22
28
|
def initialize(input)
|
23
|
-
@input = StringScanner.new(input)
|
24
|
-
|
29
|
+
@input = input.is_a?(StringScanner) ? input : StringScanner.new(input)
|
30
|
+
@buffer = []
|
25
31
|
end
|
26
32
|
|
27
33
|
# Tests if given pattern matches the tokens that follow at current
|
@@ -33,12 +39,14 @@ module JsDuck
|
|
33
39
|
# look(:ident, "=", :regex)
|
34
40
|
#
|
35
41
|
def look(*tokens)
|
42
|
+
buffer_tokens(tokens.length)
|
36
43
|
i = 0
|
37
44
|
tokens.all? do |t|
|
38
|
-
tok = @
|
45
|
+
tok = @buffer[i]
|
39
46
|
i += 1
|
40
|
-
|
41
|
-
|
47
|
+
if !tok
|
48
|
+
false
|
49
|
+
elsif t.instance_of?(Symbol)
|
42
50
|
tok[:type] == t
|
43
51
|
else
|
44
52
|
tok[:value] == t
|
@@ -57,16 +65,39 @@ module JsDuck
|
|
57
65
|
# pointing to the line where the doc-comment began.
|
58
66
|
#
|
59
67
|
def next(full=false)
|
60
|
-
|
68
|
+
buffer_tokens(1)
|
69
|
+
tok = @buffer.shift
|
70
|
+
# advance the scanpointer to the position after this token
|
71
|
+
@input.pos = tok[:pos]
|
61
72
|
full ? tok : tok[:value]
|
62
73
|
end
|
63
74
|
|
64
75
|
# True when no more tokens.
|
65
76
|
def empty?
|
66
|
-
|
77
|
+
buffer_tokens(1)
|
78
|
+
return !@buffer.first
|
79
|
+
end
|
80
|
+
|
81
|
+
# Ensures next n tokens are read in buffer
|
82
|
+
#
|
83
|
+
# At the end of buffering the initial position scanpointer is
|
84
|
+
# restored. Only the #next method will advance the scanpointer in
|
85
|
+
# a way that's visible outside this class.
|
86
|
+
def buffer_tokens(n)
|
87
|
+
prev_pos = @input.pos
|
88
|
+
@input.pos = @buffer.last[:pos] if @buffer.last
|
89
|
+
(n - @buffer.length).times do
|
90
|
+
@previous_token = tok = next_token
|
91
|
+
if tok
|
92
|
+
# remember scanpointer position after each token
|
93
|
+
tok[:pos] = @input.pos
|
94
|
+
@buffer << tok
|
95
|
+
end
|
96
|
+
end
|
97
|
+
@input.pos = prev_pos
|
67
98
|
end
|
68
99
|
|
69
|
-
#
|
100
|
+
# Parses out next token from input stream.
|
70
101
|
#
|
71
102
|
# For efficency we look for tokens in order of frequency in
|
72
103
|
# JavaScript source code:
|
@@ -79,36 +110,35 @@ module JsDuck
|
|
79
110
|
# The remaining token types are less frequent, so these are left
|
80
111
|
# to the end.
|
81
112
|
#
|
82
|
-
def
|
83
|
-
@tokens = []
|
113
|
+
def next_token
|
84
114
|
while !@input.eos? do
|
85
115
|
skip_white
|
86
116
|
if @input.check(/[.(),;={}:]/)
|
87
|
-
|
117
|
+
return {
|
88
118
|
:type => :operator,
|
89
119
|
:value => @input.scan(/./)
|
90
120
|
}
|
91
121
|
elsif @input.check(/[a-zA-Z_]/)
|
92
122
|
value = @input.scan(/\w+/)
|
93
|
-
|
123
|
+
return {
|
94
124
|
:type => KEYWORDS[value] ? :keyword : :ident,
|
95
125
|
:value => value
|
96
126
|
}
|
97
127
|
elsif @input.check(/'/)
|
98
|
-
|
128
|
+
return {
|
99
129
|
:type => :string,
|
100
|
-
:value => @input.scan(/'([^'\\]|\\.)*'/).sub(/^'(.*)'
|
130
|
+
:value => @input.scan(/'([^'\\]|\\.)*'/m).sub(/^'(.*)'$/m, "\\1")
|
101
131
|
}
|
102
132
|
elsif @input.check(/"/)
|
103
|
-
|
133
|
+
return {
|
104
134
|
:type => :string,
|
105
|
-
:value => @input.scan(/"([^"\\]|\\.)*"/).sub(/^"(.*)"
|
135
|
+
:value => @input.scan(/"([^"\\]|\\.)*"/m).sub(/^"(.*)"$/m, "\\1")
|
106
136
|
}
|
107
137
|
elsif @input.check(/\//)
|
108
138
|
# Several things begin with dash:
|
109
139
|
# - comments, regexes, division-operators
|
110
140
|
if @input.check(/\/\*\*/)
|
111
|
-
|
141
|
+
return {
|
112
142
|
:type => :doc_comment,
|
113
143
|
# Calculate current line number, starting with 1
|
114
144
|
:linenr => @input.string[0...@input.pos].count("\n") + 1,
|
@@ -121,30 +151,30 @@ module JsDuck
|
|
121
151
|
# skip line comment
|
122
152
|
@input.scan_until(/\n|\Z/)
|
123
153
|
elsif regex?
|
124
|
-
|
154
|
+
return {
|
125
155
|
:type => :regex,
|
126
156
|
:value => @input.scan(/\/([^\/\\]|\\.)*\/[gim]*/)
|
127
157
|
}
|
128
158
|
else
|
129
|
-
|
159
|
+
return {
|
130
160
|
:type => :operator,
|
131
161
|
:value => @input.scan(/\//)
|
132
162
|
}
|
133
163
|
end
|
134
164
|
elsif @input.check(/[0-9]+/)
|
135
165
|
nr = @input.scan(/[0-9]+(\.[0-9]*)?/)
|
136
|
-
|
166
|
+
return {
|
137
167
|
:type => :number,
|
138
168
|
:value => nr
|
139
169
|
}
|
140
170
|
elsif @input.check(/\$/)
|
141
171
|
value = @input.scan(/\$\w*/)
|
142
|
-
|
172
|
+
return {
|
143
173
|
:type => :ident,
|
144
174
|
:value => value
|
145
175
|
}
|
146
176
|
elsif @input.check(/./)
|
147
|
-
|
177
|
+
return {
|
148
178
|
:type => :operator,
|
149
179
|
:value => @input.scan(/./)
|
150
180
|
}
|
@@ -160,9 +190,9 @@ module JsDuck
|
|
160
190
|
# - closing square-bracket ]
|
161
191
|
# Otherwise it's a beginning of regex
|
162
192
|
def regex?
|
163
|
-
if @
|
164
|
-
type = @
|
165
|
-
value = @
|
193
|
+
if @previous_token
|
194
|
+
type = @previous_token[:type]
|
195
|
+
value = @previous_token[:value]
|
166
196
|
if type == :ident || type == :number
|
167
197
|
return false
|
168
198
|
elsif type == :keyword && value == "this"
|
data/lib/jsduck/lint.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'jsduck/logger'
|
2
|
+
|
3
|
+
module JsDuck
|
4
|
+
|
5
|
+
# Reports bugs and problems in documentation
|
6
|
+
class Lint
|
7
|
+
attr_accessor :relations
|
8
|
+
|
9
|
+
def initialize(relations)
|
10
|
+
@relations = relations
|
11
|
+
end
|
12
|
+
|
13
|
+
# Runs the linter
|
14
|
+
def run
|
15
|
+
warn_globals
|
16
|
+
warn_unnamed
|
17
|
+
warn_optional_params
|
18
|
+
warn_duplicate_params
|
19
|
+
end
|
20
|
+
|
21
|
+
# print warning for each global member
|
22
|
+
def warn_globals
|
23
|
+
global = @relations["global"]
|
24
|
+
return unless global
|
25
|
+
global.each_member do |member|
|
26
|
+
warn("Global #{member[:tagname]}: #{member[:name]}", member)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# print warning for each member or parameter with no name
|
31
|
+
def warn_unnamed
|
32
|
+
each_member do |member|
|
33
|
+
if !member[:name] || member[:name] == ""
|
34
|
+
warn("Unnamed #{member[:tagname]}", member)
|
35
|
+
end
|
36
|
+
(member[:params] || []).each do |p|
|
37
|
+
if !p[:name] || p[:name] == ""
|
38
|
+
warn("Unnamed parameter", member)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# print warning for each non-optional parameter that follows an optional parameter
|
45
|
+
def warn_optional_params
|
46
|
+
each_member do |member|
|
47
|
+
if member[:tagname] == :method
|
48
|
+
optional_found = false
|
49
|
+
member[:params].each do |p|
|
50
|
+
if optional_found && !p[:optional]
|
51
|
+
warn("Optional param can't be followed by regular param #{p[:name]}", member)
|
52
|
+
end
|
53
|
+
optional_found = optional_found || p[:optional]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# print warnings for duplicate parameter names
|
60
|
+
def warn_duplicate_params
|
61
|
+
each_member do |member|
|
62
|
+
params = {}
|
63
|
+
(member[:params] || []).each do |p|
|
64
|
+
if params[p[:name]]
|
65
|
+
warn("Duplicate parameter name #{p[:name]}", member)
|
66
|
+
end
|
67
|
+
params[p[:name]] = true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Loops through all members of all classes
|
73
|
+
def each_member(&block)
|
74
|
+
@relations.each {|cls| cls.each_member(&block) }
|
75
|
+
end
|
76
|
+
|
77
|
+
# Prints warning + filename and linenumber from doc-context
|
78
|
+
def warn(msg, context)
|
79
|
+
Logger.instance.warn(msg + " in #{context[:filename]} line #{context[:linenr]}")
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|