@@ -2888,6 +2888,29 @@ namespace ts.projectSystem {
28882888 } ) ;
28892889
28902890 describe ( "tsserverProjectSystem Proper errors" , ( ) => {
2891+ function createErrorLogger ( ) {
2892+ let hasError = false ;
2893+ const errorLogger : server . Logger = {
2894+ close : noop ,
2895+ hasLevel : ( ) => true ,
2896+ loggingEnabled : ( ) => true ,
2897+ perftrc : noop ,
2898+ info : noop ,
2899+ msg : ( _s , type ) => {
2900+ if ( type === server . Msg . Err ) {
2901+ hasError = true ;
2902+ }
2903+ } ,
2904+ startGroup : noop ,
2905+ endGroup : noop ,
2906+ getLogFileName : ( ) : string => undefined
2907+ } ;
2908+ return {
2909+ errorLogger,
2910+ hasError : ( ) => hasError
2911+ } ;
2912+ }
2913+
28912914 it ( "document is not contained in project" , ( ) => {
28922915 const file1 = {
28932916 path : "/a/b/app.ts" ,
@@ -2910,23 +2933,8 @@ namespace ts.projectSystem {
29102933 describe ( "when opening new file that doesnt exist on disk yet" , ( ) => {
29112934 function verifyNonExistentFile ( useProjectRoot : boolean ) {
29122935 const host = createServerHost ( [ libFile ] ) ;
2913- let hasError = false ;
2914- const errLogger : server . Logger = {
2915- close : noop ,
2916- hasLevel : ( ) => true ,
2917- loggingEnabled : ( ) => true ,
2918- perftrc : noop ,
2919- info : noop ,
2920- msg : ( _s , type ) => {
2921- if ( type === server . Msg . Err ) {
2922- hasError = true ;
2923- }
2924- } ,
2925- startGroup : noop ,
2926- endGroup : noop ,
2927- getLogFileName : ( ) : string => undefined
2928- } ;
2929- const session = createSession ( host , { canUseEvents : true , logger : errLogger , useInferredProjectPerProjectRoot : true } ) ;
2936+ const { hasError, errorLogger } = createErrorLogger ( ) ;
2937+ const session = createSession ( host , { canUseEvents : true , logger : errorLogger , useInferredProjectPerProjectRoot : true } ) ;
29302938
29312939 const folderPath = "/user/someuser/projects/someFolder" ;
29322940 const projectService = session . getProjectService ( ) ;
@@ -2967,13 +2975,13 @@ namespace ts.projectSystem {
29672975 // Run the last one = get error request
29682976 host . runQueuedTimeoutCallbacks ( newTimeoutId ) ;
29692977
2970- assert . isFalse ( hasError ) ;
2978+ assert . isFalse ( hasError ( ) ) ;
29712979 host . checkTimeoutQueueLength ( 2 ) ;
29722980 checkErrorMessage ( session , "syntaxDiag" , { file : untitledFile , diagnostics : [ ] } ) ;
29732981 session . clearMessages ( ) ;
29742982
29752983 host . runQueuedImmediateCallbacks ( ) ;
2976- assert . isFalse ( hasError ) ;
2984+ assert . isFalse ( hasError ( ) ) ;
29772985 checkErrorMessage ( session , "semanticDiag" , { file : untitledFile , diagnostics : [ ] } ) ;
29782986
29792987 checkCompleteEvent ( session , 2 , expectedSequenceId ) ;
@@ -3039,6 +3047,31 @@ namespace ts.projectSystem {
30393047 session . clearMessages ( ) ;
30403048 }
30413049 } ) ;
3050+
3051+ it ( "Getting errors before opening file" , ( ) => {
3052+ const file : FileOrFolder = {
3053+ path : "/a/b/project/file.ts" ,
3054+ content : "let x: number = false;"
3055+ } ;
3056+ const host = createServerHost ( [ file , libFile ] ) ;
3057+ const { hasError, errorLogger } = createErrorLogger ( ) ;
3058+ const session = createSession ( host , { canUseEvents : true , logger : errorLogger } ) ;
3059+
3060+ session . clearMessages ( ) ;
3061+ const expectedSequenceId = session . getNextSeq ( ) ;
3062+ session . executeCommandSeq < protocol . GeterrRequest > ( {
3063+ command : server . CommandNames . Geterr ,
3064+ arguments : {
3065+ delay : 0 ,
3066+ files : [ file . path ]
3067+ }
3068+ } ) ;
3069+
3070+ host . runQueuedImmediateCallbacks ( ) ;
3071+ assert . isFalse ( hasError ( ) ) ;
3072+ checkCompleteEvent ( session , 1 , expectedSequenceId ) ;
3073+ session . clearMessages ( ) ;
3074+ } ) ;
30423075 } ) ;
30433076
30443077 describe ( "tsserverProjectSystem autoDiscovery" , ( ) => {
0 commit comments