@@ -44,6 +44,7 @@ import * as strings from 'vs/base/common/strings';
4444import { RPCProtocol } from 'vs/workbench/services/extensions/node/rpcProtocol' ;
4545
4646const SystemExtensionsRoot = path . normalize ( path . join ( URI . parse ( require . toUrl ( '' ) ) . fsPath , '..' , 'extensions' ) ) ;
47+ const ExtraDevSystemExtensionsRoot = path . normalize ( path . join ( URI . parse ( require . toUrl ( '' ) ) . fsPath , '..' , '.build' , 'builtInExtensions' ) ) ;
4748
4849// Enable to see detailed message communication between window and extension host
4950const logExtensionHostCommunication = false ;
@@ -624,6 +625,36 @@ export class ExtensionService extends Disposable implements IExtensionService {
624625 log
625626 ) ;
626627
628+ let finalBuiltinExtensions : TPromise < IExtensionDescription [ ] > = builtinExtensions ;
629+
630+ if ( devMode ) {
631+ const extraBuiltinExtensions = ExtensionScanner . scanExtensions ( new ExtensionScannerInput ( version , commit , locale , devMode , ExtraDevSystemExtensionsRoot , true ) , log ) ;
632+ finalBuiltinExtensions = TPromise . join ( [ builtinExtensions , extraBuiltinExtensions ] ) . then ( ( [ builtinExtensions , extraBuiltinExtensions ] ) => {
633+ let resultMap : { [ id : string ] : IExtensionDescription ; } = Object . create ( null ) ;
634+ for ( let i = 0 , len = builtinExtensions . length ; i < len ; i ++ ) {
635+ resultMap [ builtinExtensions [ i ] . id ] = builtinExtensions [ i ] ;
636+ }
637+ // Overwrite with extensions found in extra
638+ for ( let i = 0 , len = extraBuiltinExtensions . length ; i < len ; i ++ ) {
639+ resultMap [ extraBuiltinExtensions [ i ] . id ] = extraBuiltinExtensions [ i ] ;
640+ }
641+
642+ let resultArr = Object . keys ( resultMap ) . map ( ( id ) => resultMap [ id ] ) ;
643+ resultArr . sort ( ( a , b ) => {
644+ const aLastSegment = path . basename ( a . extensionFolderPath ) ;
645+ const bLastSegment = path . basename ( b . extensionFolderPath ) ;
646+ if ( aLastSegment < bLastSegment ) {
647+ return - 1 ;
648+ }
649+ if ( aLastSegment > bLastSegment ) {
650+ return 1 ;
651+ }
652+ return 0 ;
653+ } ) ;
654+ return resultArr ;
655+ } ) ;
656+ }
657+
627658 const userExtensions = (
628659 environmentService . disableExtensions || ! environmentService . extensionsPath
629660 ? TPromise . as ( [ ] )
@@ -646,7 +677,7 @@ export class ExtensionService extends Disposable implements IExtensionService {
646677 : TPromise . as ( [ ] )
647678 ) ;
648679
649- return TPromise . join ( [ builtinExtensions , userExtensions , developedExtensions ] )
680+ return TPromise . join ( [ finalBuiltinExtensions , userExtensions , developedExtensions ] )
650681 . then ( ( extensionDescriptions : IExtensionDescription [ ] [ ] ) => {
651682 const system = extensionDescriptions [ 0 ] ;
652683 const user = extensionDescriptions [ 1 ] ;
0 commit comments