@@ -432,61 +432,64 @@ export class TypeScriptService {
432432 *
433433 * @return Observable that emits a single PackageDescriptor or undefined if the definition does not belong to any package
434434 */
435- protected _getPackageDescriptor ( uri : string ) : Observable < PackageDescriptor | undefined > {
436- // Get package name of the dependency in which the symbol is defined in, if any
437- const packageName = extractNodeModulesPackageName ( uri ) ;
438- if ( packageName ) {
439- // The symbol is part of a dependency in node_modules
440- // Build URI to package.json of the Dependency
441- const encodedPackageName = packageName . split ( '/' ) . map ( encodeURIComponent ) . join ( '/' ) ;
442- const parts = url . parse ( uri ) ;
443- const packageJsonUri = url . format ( { ...parts , pathname : parts . pathname ! . slice ( 0 , parts . pathname ! . lastIndexOf ( '/node_modules/' + encodedPackageName ) ) + `/node_modules/${ encodedPackageName } /package.json` } ) ;
444- // Fetch the package.json of the dependency
445- return Observable . from ( this . updater . ensure ( packageJsonUri ) )
446- . map ( ( ) : PackageDescriptor | undefined => {
447- const packageJson = JSON . parse ( this . inMemoryFileSystem . getContent ( packageJsonUri ) ) ;
448- const { name, version } = packageJson ;
449- if ( name ) {
450- // Used by the LSP proxy to shortcut database lookup of repo URL for PackageDescriptor
451- let repoURL : string | undefined ;
452- if ( name . startsWith ( '@types/' ) ) {
453- // if the dependency package is an @types / package, point the repo to DefinitelyTyped
454- repoURL = 'https://github.com/DefinitelyTyped/DefinitelyTyped' ;
455- } else {
456- // else use repository field from package.json
457- repoURL = typeof packageJson . repository === 'object' ? packageJson . repository . url : undefined ;
435+ protected _getPackageDescriptor ( uri : string , childOf = new Span ( ) ) : Observable < PackageDescriptor | undefined > {
436+ return traceObservable ( 'Get PackageDescriptor' , childOf , span => {
437+ span . addTags ( { uri } ) ;
438+ // Get package name of the dependency in which the symbol is defined in, if any
439+ const packageName = extractNodeModulesPackageName ( uri ) ;
440+ if ( packageName ) {
441+ // The symbol is part of a dependency in node_modules
442+ // Build URI to package.json of the Dependency
443+ const encodedPackageName = packageName . split ( '/' ) . map ( encodeURIComponent ) . join ( '/' ) ;
444+ const parts = url . parse ( uri ) ;
445+ const packageJsonUri = url . format ( { ...parts , pathname : parts . pathname ! . slice ( 0 , parts . pathname ! . lastIndexOf ( '/node_modules/' + encodedPackageName ) ) + `/node_modules/${ encodedPackageName } /package.json` } ) ;
446+ // Fetch the package.json of the dependency
447+ return Observable . from ( this . updater . ensure ( packageJsonUri , span ) )
448+ . map ( ( ) : PackageDescriptor | undefined => {
449+ const packageJson = JSON . parse ( this . inMemoryFileSystem . getContent ( packageJsonUri ) ) ;
450+ const { name, version } = packageJson ;
451+ if ( name ) {
452+ // Used by the LSP proxy to shortcut database lookup of repo URL for PackageDescriptor
453+ let repoURL : string | undefined ;
454+ if ( name . startsWith ( '@types/' ) ) {
455+ // if the dependency package is an @types / package, point the repo to DefinitelyTyped
456+ repoURL = 'https://github.com/DefinitelyTyped/DefinitelyTyped' ;
457+ } else {
458+ // else use repository field from package.json
459+ repoURL = typeof packageJson . repository === 'object' ? packageJson . repository . url : undefined ;
460+ }
461+ return { name, version, repoURL } ;
458462 }
459- return { name, version, repoURL } ;
460- }
461- return undefined ;
462- } ) ;
463- } else {
464- // The symbol is defined in the root package of the workspace, not in a dependency
465- // Get root package.json
466- return Observable . from ( this . packageManager . getClosestPackageJson ( uri ) )
467- . map ( ( packageJson ) : PackageDescriptor | undefined => {
468- if ( ! packageJson ) {
469- // Workspace has no package.json
470463 return undefined ;
471- }
472- let { name, version } = packageJson ;
473- if ( name ) {
474- let repoURL = typeof packageJson . repository === 'object' ? packageJson . repository . url : undefined ;
475- // If the root package is DefinitelyTyped, find out the proper @types package name for each typing
476- if ( name === 'definitely-typed' ) {
477- name = extractDefinitelyTypedPackageName ( uri ) ;
478- if ( ! name ) {
479- this . logger . error ( `Could not extract package name from DefinitelyTyped URI ${ uri } ` ) ;
480- return undefined ;
464+ } ) ;
465+ } else {
466+ // The symbol is defined in the root package of the workspace, not in a dependency
467+ // Get root package.json
468+ return Observable . from ( this . packageManager . getClosestPackageJson ( uri , span ) )
469+ . map ( ( packageJson ) : PackageDescriptor | undefined => {
470+ if ( ! packageJson ) {
471+ // Workspace has no package.json
472+ return undefined ;
473+ }
474+ let { name, version } = packageJson ;
475+ if ( name ) {
476+ let repoURL = typeof packageJson . repository === 'object' ? packageJson . repository . url : undefined ;
477+ // If the root package is DefinitelyTyped, find out the proper @types package name for each typing
478+ if ( name === 'definitely-typed' ) {
479+ name = extractDefinitelyTypedPackageName ( uri ) ;
480+ if ( ! name ) {
481+ this . logger . error ( `Could not extract package name from DefinitelyTyped URI ${ uri } ` ) ;
482+ return undefined ;
483+ }
484+ version = undefined ;
485+ repoURL = 'https://github.com/DefinitelyTyped/DefinitelyTyped' ;
481486 }
482- version = undefined ;
483- repoURL = 'https://github.com/DefinitelyTyped/DefinitelyTyped' ;
487+ return { name, version, repoURL } ;
484488 }
485- return { name, version, repoURL } ;
486- }
487- return undefined ;
488- } ) ;
489- }
489+ return undefined ;
490+ } ) ;
491+ }
492+ } ) ;
490493 }
491494
492495 /**
0 commit comments