Commits

ZyX_I committed 49b450c

@frawor: Added s:_loading variable
Made require feature run dfeature.load when appropriate
autoload/frawor: Made frawor#Lockvar always avoid locking _pluginloaded and _loading
tests: Added require-feature-twoload and require-feature-twoload-after-registration tests

Comments (0)

Files changed (11)

autoload/frawor.vim

 let s:_functions+=['frawor#Reload']
 "▶1 frawor#Lockvar    :: p:, varnamelist → + :lockvar
 function frawor#Lockvar(s, nolock)
-    let nolock=split(a:nolock, ',')
+    let nolock=split(a:nolock, ',')+['_pluginloaded', '_loading']
     for varname in filter(keys(a:s), 'index(nolock, v:val)==-1')
         lockvar! a:s[varname]
     endfor
 *s:_pluginloaded*  plugin/frawor    Integer. Is set to 0 after plugin is 
                                   registered and then to 1 after plugin is 
                                   loaded.
+*s:_loading*       plugin/frawor    Integer. Is set to 1 when frawor started 
+                                  to load plugin and unset after plugin was 
+                                  loaded.
 *s:_frawor*        plugin/frawor    Dictionary. Is set by |FraworRegister()|.
 *s:_messages*      plugin/frawor    Dictionary that contains strings as 
                                   values. Required for |frawor-f-warn| and 
 
 @frawor:
     0.1: Added |frawor-f-require| and |frawor-fk-depadd|
+    0.2: Added |s:_loading| variable
 @/mappings:
     0.1: Added possibility to specify dictionaries in `strfunc' and `func' 
          keys.

plugin/frawor.vim

     if plugdict.status!=2
         let shadowdict=s:shadow[plugdict.id]
         let s:loading[plid]=1
+        let plugdict.g._loading=1
         let d={}
         try
             "▶2 Loading dependencies
             endif
             "▲2
         finally
+            unlet plugdict.g._loading
             unlet s:loading[plid]
         endtry
     endif
 let s:features[s:newfeature.id]=s:newfeature
 let s:featordered.all+=[s:newfeature]
 "▶1 Plugin registration
-call s:F.newplugin([0, 1], s:Eval('+matchstr(expand("<sfile>"), ''\d\+'')'),
+call s:F.newplugin([0, 2], s:Eval('+matchstr(expand("<sfile>"), ''\d\+'')'),
             \      expand('<sfile>:p'), {}, 1, s:)
 let s:shadow[s:_frawor.id].features.newfeature.newfeature=s:newfeature
 unlet s:newfeature
         let s:dependents[dplid]={}
     endif
     let s:dependents[dplid][a:plugdict.id]=a:plugdict
+    "▲2
+    let shadowdict=s:shadow[a:plugdict.id]
+    let fdicts=shadowdict.features
     "▶2 Load dependency if required
     let olddstatus=0
     let doload=1
     if doload
         if s:F.loadplugin(dplid)
             if olddstatus==0
+                if has_key(s:loading, a:plugdict.id) && has_key(s:plfeatures,
+                            \                                   dplid)
+                    let dfeatures=s:plfeatures[dplid]
+                    call map(filter(values(dfeatures), 'has_key(v:val,"load")'),
+                                \'v:val.load(a:plugdict, fdicts[v:val.name])')
+                endif
                 call s:F.runfeatures(a:plugdict, 'depadd', dplid)
                 return 1
             endif
         endif
     endif
     "▲2
-    let dfeatures=s:plfeatures[dplid]
-    let shadowdict=s:shadow[a:plugdict.id]
-    let fdicts=shadowdict.features
+    let dfeatures=get(s:plfeatures, dplid, {})
     for feature in filter(values(dfeatures), '!has_key(fdicts, v:val.name)')
         let fdict={}
         let fdicts[feature.name]=fdict
             let a:plugdict.g._f[feature.name]=
                         \s:F.createcons(a:plugdict, shadowdict, feature)
         endif
-        if a:plugdict.status==2
-            if has_key(feature, 'load')
-                call feature.load(a:plugdict, fdict)
-            endif
+        if has_key(feature, 'load') && (a:plugdict.status==2 ||
+                    \                   has_key(s:loading, a:plugdict.id))
+            call feature.load(a:plugdict, fdict)
         endif
     endfor
     call s:F.runfeatures(a:plugdict, 'depadd', dplid)

plugin/frawor/base64.vim

 "▶1 post resource
 call s:_f.postresource('base64', s:F.base64)
 "▶1
-call frawor#Lockvar(s:, '_pluginloaded')
+call frawor#Lockvar(s:, '')
 " vim: fmr=▶,▲ sw=4 ts=4 sts=4 et tw=80

plugin/frawor/table.vim

 call s:_f.postresource('printtable', s:F.printtable)
 call s:_f.postresource('strdisplaywidth', s:F.strdisplaywidth)
 "▶1
-call frawor#Lockvar(s:, '_pluginloaded')
+call frawor#Lockvar(s:, '')
 " vim: fmr=▶,▲ sw=4 ts=4 sts=4 et tw=80

test/require-feature-twoload-after-registration.in

+:let &rtp.=",".escape($TESTDIR, ',\').'/rtp'
+:let g:testfile="plugin/".g:curtest.".vim"
+:source test.vim
+:call FraworUnload(g:testfile[:-5])
+:source test.vim

test/require-feature-twoload-after-registration.ok

+newfeature
+require
+throw
+warn
+Entered s:F.main()
+Registered plugin/twoload-plugin-with-feature-2
+Has run :runtime
+Registered plugin/twoload-plugin-with-feature-3
+Loaded plugin/twoload-plugin-with-feature-3
+Has run FraworLoad
+Registered plugin/twoload-plugin-with-feature-after-registration-2
+Has run :runtime 2
+Registered plugin/twoload-plugin-with-feature-after-registration-3
+Loaded plugin/twoload-plugin-with-feature-after-registration-3
+Has run FraworLoad 2
+Registered plugin/twoload-plugin-with-feature-1
+Loaded plugin/twoload-plugin-with-feature-1
+feature-register: plugin/twoload-plugin-with-feature-1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
+require tpwf1: 1
+Loaded plugin/twoload-plugin-with-feature-2
+feature-register: plugin/twoload-plugin-with-feature-2
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
+require tpwf2: 1
+feature-register: plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
+require tpwf3: 1
+Registered plugin/twoload-plugin-with-feature-after-registration-1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-1
+Loaded plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
+require tpwfar1: 1
+Loaded plugin/twoload-plugin-with-feature-after-registration-2
+feature-register: plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
+require tpwfar2: 1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
+require tpwfar3: 1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
+require pwf: 1
+newfeature
+require
+testfeature
+throw
+warn
+feature-load: plugin/require-feature-twoload-after-registration
+feature-load: plugin/twoload-plugin-with-feature-1
+feature-load: plugin/twoload-plugin-with-feature-2
+feature-load: plugin/twoload-plugin-with-feature-3
+feature-load: plugin/twoload-plugin-with-feature-after-registration-1
+feature-load: plugin/twoload-plugin-with-feature-after-registration-2
+feature-load: plugin/twoload-plugin-with-feature-after-registration-3
+Loaded plugin/require-feature-twoload-after-registration
+feature-unloadpre: plugin/twoload-plugin-with-feature-1
+feature-unloadpre: plugin/twoload-plugin-with-feature-2
+feature-unloadpre: plugin/twoload-plugin-with-feature-3
+feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-1
+feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-2
+feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-3
+feature-unload: plugin/twoload-plugin-with-feature-1
+feature-unload: plugin/twoload-plugin-with-feature-2
+feature-unload: plugin/twoload-plugin-with-feature-3
+feature-unload: plugin/twoload-plugin-with-feature-after-registration-1
+feature-unload: plugin/twoload-plugin-with-feature-after-registration-2
+feature-unload: plugin/twoload-plugin-with-feature-after-registration-3
+newfeature
+require
+throw
+warn
+Entered s:F.main()
+Has run :runtime
+Has run FraworLoad
+Has run :runtime 2
+Has run FraworLoad 2
+feature-register: plugin/twoload-plugin-with-feature-1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
+require tpwf1: 1
+feature-register: plugin/twoload-plugin-with-feature-2
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
+require tpwf2: 1
+feature-register: plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
+require tpwf3: 1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
+require tpwfar1: 1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
+require tpwfar2: 1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
+require tpwfar3: 1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
+require pwf: 1
+newfeature
+require
+testfeature
+throw
+warn
+feature-load: plugin/require-feature-twoload-after-registration
+feature-load: plugin/twoload-plugin-with-feature-1
+feature-load: plugin/twoload-plugin-with-feature-2
+feature-load: plugin/twoload-plugin-with-feature-3
+feature-load: plugin/twoload-plugin-with-feature-after-registration-1
+feature-load: plugin/twoload-plugin-with-feature-after-registration-2
+feature-load: plugin/twoload-plugin-with-feature-after-registration-3
+Loaded plugin/require-feature-twoload-after-registration

test/require-feature-twoload.in

+:let &rtp.=",".escape($TESTDIR, ',\').'/rtp'
+:let g:testfile="plugin/".g:curtest.".vim"
+:source test.vim
+:call FraworUnload(g:testfile[:-5])
+:source test.vim

test/require-feature-twoload.ok

+newfeature
+require
+throw
+warn
+Entered s:F.main()
+Registered plugin/twoload-plugin-with-feature-2
+Has run :runtime
+Registered plugin/twoload-plugin-with-feature-3
+Loaded plugin/twoload-plugin-with-feature-3
+Has run FraworLoad
+Registered plugin/twoload-plugin-with-feature-after-registration-2
+Has run :runtime 2
+Registered plugin/twoload-plugin-with-feature-after-registration-3
+Loaded plugin/twoload-plugin-with-feature-after-registration-3
+Has run FraworLoad 2
+Registered plugin/twoload-plugin-with-feature-1
+Loaded plugin/twoload-plugin-with-feature-1
+feature-register: plugin/twoload-plugin-with-feature-1
+feature-load: plugin/twoload-plugin-with-feature-1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
+require tpwf1: 1
+Loaded plugin/twoload-plugin-with-feature-2
+feature-register: plugin/twoload-plugin-with-feature-2
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
+require tpwf2: 1
+feature-register: plugin/twoload-plugin-with-feature-3
+feature-load: plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
+require tpwf3: 1
+Registered plugin/twoload-plugin-with-feature-after-registration-1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-1
+Loaded plugin/twoload-plugin-with-feature-after-registration-1
+feature-load: plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
+require tpwfar1: 1
+Loaded plugin/twoload-plugin-with-feature-after-registration-2
+feature-register: plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
+require tpwfar2: 1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-3
+feature-load: plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
+require tpwfar3: 1
+feature-load: plugin/require-feature-twoload
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
+require pwf: 1
+newfeature
+require
+testfeature
+throw
+warn
+Loaded plugin/require-feature-twoload
+feature-unloadpre: plugin/twoload-plugin-with-feature-1
+feature-unloadpre: plugin/twoload-plugin-with-feature-2
+feature-unloadpre: plugin/twoload-plugin-with-feature-3
+feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-1
+feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-2
+feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-3
+feature-unload: plugin/twoload-plugin-with-feature-1
+feature-unload: plugin/twoload-plugin-with-feature-2
+feature-unload: plugin/twoload-plugin-with-feature-3
+feature-unload: plugin/twoload-plugin-with-feature-after-registration-1
+feature-unload: plugin/twoload-plugin-with-feature-after-registration-2
+feature-unload: plugin/twoload-plugin-with-feature-after-registration-3
+newfeature
+require
+throw
+warn
+Entered s:F.main()
+Has run :runtime
+Has run FraworLoad
+Has run :runtime 2
+Has run FraworLoad 2
+feature-register: plugin/twoload-plugin-with-feature-1
+feature-load: plugin/twoload-plugin-with-feature-1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
+require tpwf1: 1
+feature-register: plugin/twoload-plugin-with-feature-2
+feature-load: plugin/twoload-plugin-with-feature-2
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
+require tpwf2: 1
+feature-register: plugin/twoload-plugin-with-feature-3
+feature-load: plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
+require tpwf3: 1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-1
+feature-load: plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
+require tpwfar1: 1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-2
+feature-load: plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
+require tpwfar2: 1
+feature-register: plugin/twoload-plugin-with-feature-after-registration-3
+feature-load: plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
+require tpwfar3: 1
+feature-load: plugin/require-feature-twoload
+feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
+feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
+require pwf: 1
+newfeature
+require
+testfeature
+throw
+warn
+Loaded plugin/require-feature-twoload

test/rtp/plugin/require-feature-twoload-after-registration.vim

+if !exists('s:_pluginloaded')
+    execute frawor#Setup('0.0', {'@frawor': '0.1'}, 0)
+    call WriteFile(sort(keys(s:_f)))
+    function s:F.main()
+        call WriteFile('Entered s:F.main()')
+        runtime plugin/twoload-plugin-with-feature-2.vim
+        call WriteFile('Has run :runtime')
+        call FraworLoad('@twoload-plugin-with-feature-3')
+        call WriteFile('Has run FraworLoad')
+        runtime plugin/twoload-plugin-with-feature-after-registration-2.vim
+        call WriteFile('Has run :runtime 2')
+        call FraworLoad('@twoload-plugin-with-feature-after-registration-3')
+        call WriteFile('Has run FraworLoad 2')
+        call WriteFile('require tpwf1: '.s:_f.require('@twoload-plugin-with-feature-1', [0, 0], 0))
+        call WriteFile('require tpwf2: '.s:_f.require('@twoload-plugin-with-feature-2', [0, 0], 0))
+        call WriteFile('require tpwf3: '.s:_f.require('@twoload-plugin-with-feature-3', [0, 0], 0))
+        call WriteFile('require tpwfar1: '.s:_f.require('@twoload-plugin-with-feature-after-registration-1', [0, 0], 0))
+        call WriteFile('require tpwfar2: '.s:_f.require('@twoload-plugin-with-feature-after-registration-2', [0, 0], 0))
+        call WriteFile('require tpwfar3: '.s:_f.require('@twoload-plugin-with-feature-after-registration-3', [0, 0], 0))
+        call WriteFile('require pwf: '.s:_f.require('@plugin-with-feature',             [0, 0], 0))
+        call WriteFile(sort(keys(s:_f)))
+    endfunction
+    call s:F.main()
+    finish
+elseif s:_pluginloaded
+    finish
+endif
+call WriteFile('Loaded '.s:_frawor.id)

test/rtp/plugin/require-feature-twoload.vim

+if !exists('s:_pluginloaded')
+    execute frawor#Setup('0.0', {'@frawor': '0.1'}, 0)
+    finish
+elseif s:_pluginloaded
+    finish
+endif
+function s:F.main()
+    call WriteFile('Entered s:F.main()')
+    runtime plugin/twoload-plugin-with-feature-2.vim
+    call WriteFile('Has run :runtime')
+    call FraworLoad('@twoload-plugin-with-feature-3')
+    call WriteFile('Has run FraworLoad')
+    runtime plugin/twoload-plugin-with-feature-after-registration-2.vim
+    call WriteFile('Has run :runtime 2')
+    call FraworLoad('@twoload-plugin-with-feature-after-registration-3')
+    call WriteFile('Has run FraworLoad 2')
+    call WriteFile('require tpwf1: '.s:_f.require('@twoload-plugin-with-feature-1', [0, 0], 0))
+    call WriteFile('require tpwf2: '.s:_f.require('@twoload-plugin-with-feature-2', [0, 0], 0))
+    call WriteFile('require tpwf3: '.s:_f.require('@twoload-plugin-with-feature-3', [0, 0], 0))
+    call WriteFile('require tpwfar1: '.s:_f.require('@twoload-plugin-with-feature-after-registration-1', [0, 0], 0))
+    call WriteFile('require tpwfar2: '.s:_f.require('@twoload-plugin-with-feature-after-registration-2', [0, 0], 0))
+    call WriteFile('require tpwfar3: '.s:_f.require('@twoload-plugin-with-feature-after-registration-3', [0, 0], 0))
+    call WriteFile('require pwf: '.s:_f.require('@plugin-with-feature',             [0, 0], 0))
+    call WriteFile(sort(keys(s:_f)))
+endfunction
+call WriteFile(sort(keys(s:_f)))
+call s:F.main()
+call WriteFile('Loaded '.s:_frawor.id)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.