88 "iter"
99 "runtime/debug"
1010 "slices"
11+ "strings"
1112 "sync"
1213 "sync/atomic"
1314 "time"
@@ -438,13 +439,7 @@ func (r *denoResolver) ResolveModuleName(moduleName string, containingFile strin
438439 }
439440 var response * lsproto.DenoResolution
440441 err := r .server .sendRequestSync (r .ctx , lsproto .MethodDenoCallback , params , & response )
441- if err != nil {
442- return & module.ResolvedModule {
443- ResolvedFileName : "" ,
444- Extension : "" ,
445- }, nil
446- }
447- if response == nil {
442+ if err != nil || response == nil {
448443 return & module.ResolvedModule {
449444 ResolvedFileName : "" ,
450445 Extension : "" ,
@@ -459,30 +454,116 @@ func (r *denoResolver) ResolveModuleName(moduleName string, containingFile strin
459454func (r * denoResolver ) ResolveTypeReferenceDirective (name string , containingFile string ,
460455 resolutionMode core.ResolutionMode ,
461456 redirectedReference module.ResolvedProjectReference ) (* module.ResolvedTypeReferenceDirective , []module.DiagAndArgs ) {
462- // TODO(nayeemrmn): Implement callback.
463- return r .inner .ResolveTypeReferenceDirective (name , containingFile , resolutionMode , redirectedReference )
457+ params := lsproto.DenoCallbackParams {
458+ ResolveModuleName : & lsproto.DenoResolveModuleNameParams {
459+ ModuleName : name ,
460+ ReferrerUri : lsconv .FileNameToDocumentURI (containingFile ),
461+ ImportAttributeType : nil ,
462+ ResolutionMode : int32 (resolutionMode ),
463+ CompilerOptionsKey : r .compilerOptionsKey ,
464+ },
465+ }
466+ var response * lsproto.DenoResolution
467+ err := r .server .sendRequestSync (r .ctx , lsproto .MethodDenoCallback , params , & response )
468+ if err != nil || response == nil {
469+ return & module.ResolvedTypeReferenceDirective {
470+ ResolvedFileName : "" ,
471+ Primary : true ,
472+ }, nil
473+ }
474+ return & module.ResolvedTypeReferenceDirective {
475+ ResolvedFileName : response .Uri .FileName (),
476+ Primary : true ,
477+ }, nil
464478}
465479
466480func (r * denoResolver ) ResolvePackageDirectory (moduleName string , containingFile string ,
467481 resolutionMode core.ResolutionMode ,
468482 redirectedReference module.ResolvedProjectReference ) * module.ResolvedModule {
469- // TODO(nayeemrmn): Implement callback.
470- return r .inner .ResolvePackageDirectory (moduleName , containingFile , resolutionMode , redirectedReference )
483+ params := lsproto.DenoCallbackParams {
484+ ResolveModuleName : & lsproto.DenoResolveModuleNameParams {
485+ ModuleName : moduleName ,
486+ ReferrerUri : lsconv .FileNameToDocumentURI (containingFile ),
487+ ImportAttributeType : nil ,
488+ ResolutionMode : int32 (resolutionMode ),
489+ CompilerOptionsKey : r .compilerOptionsKey ,
490+ },
491+ }
492+ var response * lsproto.DenoResolution
493+ err := r .server .sendRequestSync (r .ctx , lsproto .MethodDenoCallback , params , & response )
494+ if err != nil || response == nil {
495+ return & module.ResolvedModule {
496+ ResolvedFileName : "" ,
497+ Extension : "" ,
498+ }
499+ }
500+ return & module.ResolvedModule {
501+ ResolvedFileName : response .Uri .FileName (),
502+ Extension : response .Extension ,
503+ }
471504}
472505
473- func (r * denoResolver ) ResolveJsxImportSource (referrer string ) string {
474- // TODO(nayeemrmn): Implement callback.
475- return r .inner .ResolveJsxImportSource (referrer )
506+ func (r * denoResolver ) ResolveJsxImportSource (_referrer string ) string {
507+ params := lsproto.DenoCallbackParams {
508+ ResolveJsxImportSource : & lsproto.DenoResolveJsxImportSourceParams {
509+ CompilerOptionsKey : r .compilerOptionsKey ,
510+ },
511+ }
512+ var response * string
513+ err := r .server .sendRequestSync (r .ctx , lsproto .MethodDenoCallback , params , & response )
514+ if err != nil || response == nil {
515+ return ""
516+ }
517+ return * response
476518}
477519
478520func (r * denoResolver ) GetPackageScopeForPath (directory string ) * packagejson.InfoCacheEntry {
479- // TODO(nayeemrmn): Implement callback.
480- return r .inner .GetPackageScopeForPath (directory )
521+ if strings .HasPrefix (directory , "^/" ) {
522+ return nil
523+ }
524+ params := lsproto.DenoCallbackParams {
525+ GetPackageScopeForPath : & lsproto.DenoGetPackageScopeForPathParams {
526+ DirectoryPath : directory ,
527+ },
528+ }
529+ var response * lsproto.DenoPackageJsonScope
530+ err := r .server .sendRequestSync (r .ctx , lsproto .MethodDenoCallback , params , & response )
531+ if err != nil || response == nil {
532+ return nil
533+ }
534+ fields , err := packagejson .Parse ([]byte (response .PackageJsonText ))
535+ if err != nil {
536+ return & packagejson.InfoCacheEntry {
537+ PackageDirectory : response .PackageDirectoryPath ,
538+ DirectoryExists : true ,
539+ Contents : & packagejson.PackageJson {
540+ Parseable : false ,
541+ },
542+ }
543+ }
544+ return & packagejson.InfoCacheEntry {
545+ PackageDirectory : response .PackageDirectoryPath ,
546+ DirectoryExists : true ,
547+ Contents : & packagejson.PackageJson {
548+ Fields : fields ,
549+ Parseable : true ,
550+ },
551+ }
481552}
482553
483554func (r * denoResolver ) GetImpliedNodeFormatForFile (path string , packageJsonType string ) core.ModuleKind {
484- // TODO(nayeemrmn): Implement callback.
485- return r .inner .GetImpliedNodeFormatForFile (path , packageJsonType )
555+ params := lsproto.DenoCallbackParams {
556+ GetImpliedNodeFormatForFile : & lsproto.DenoGetImpliedNodeFormatForFileParams {
557+ Uri : lsconv .FileNameToDocumentURI (path ),
558+ CompilerOptionsKey : r .compilerOptionsKey ,
559+ },
560+ }
561+ var response core.ModuleKind
562+ err := r .server .sendRequestSync (r .ctx , lsproto .MethodDenoCallback , params , & response )
563+ if err != nil {
564+ return core .ModuleKindESNext
565+ }
566+ return response
486567}
487568
488569type Server struct {
0 commit comments