@@ -84,8 +84,8 @@ Plugin.init = function(head) {
8484
8585 const stats = cache . get ( h . KEYS . plugins ) || { } ;
8686
87- // 1. check installed plugins
88- let plugins = [ ] ;
87+ // 1. find installed plugins
88+ let installed = [ ] ;
8989 for ( let f of file . listCodeDir ( 'lib/plugins' ) ) {
9090 const p = f . data ;
9191 if ( ! p ) continue ;
@@ -98,39 +98,41 @@ Plugin.init = function(head) {
9898 log . trace ( 'new plugin, enable by default' ) ;
9999 p . enabled = true ;
100100 }
101+ installed . push ( p ) ;
102+ }
103+ // the one with bigger `id` comes first
104+ installed = _ . sortBy ( installed , x => - x . id ) ;
101105
106+ // 2. init all in reversed order
107+ for ( let i = installed . length - 1 ; i >= 0 ; -- i ) {
108+ const p = installed [ i ] ;
102109 if ( p . enabled ) {
103110 p . init ( ) ;
104111 log . trace ( 'inited plugin: ' + p . name ) ;
105112 } else {
106113 log . trace ( 'skipped plugin: ' + p . name ) ;
107114 }
108-
109- plugins . push ( p ) ;
110115 }
111116
112- // chain the plugins together
113- // the one has bigger `id` comes first
114- plugins = _ . sortBy ( plugins , x => - x . id ) ;
115-
117+ // 3. chain together
118+ const plugins = installed . filter ( x => x . enabled ) ;
116119 let last = head ;
117120 for ( let p of plugins ) {
118- if ( ! p . enabled ) continue ;
119121 last . setNext ( p ) ;
120122 last = p ;
121123 }
122124
123- // 2 . check saved plugins
125+ // 4 . check missing plugins
124126 const missings = [ ] ;
125127 for ( let k of _ . keys ( stats ) ) {
126- if ( plugins . find ( x => x . name === k ) ) continue ;
128+ if ( installed . find ( x => x . name === k ) ) continue ;
127129 const p = new Plugin ( - 1 , k , 'missing' ) ;
128130 p . enabled = stats [ k ] ;
129131 missings . push ( p ) ;
132+ log . trace ( 'missing plugin:' + p . name ) ;
130133 }
131- log . trace ( 'missing plugins: ' + missings . length ) ;
132134
133- Plugin . plugins = plugins . concat ( missings ) ;
135+ Plugin . plugins = installed . concat ( missings ) ;
134136 return missings . length === 0 ;
135137} ;
136138
0 commit comments