@@ -11,6 +11,9 @@ import {NgAnalyzedModules, analyzeNgModules, extractProgramSymbols} from '@angul
11
11
import { DirectiveNormalizer } from '@angular/compiler/src/directive_normalizer' ;
12
12
import { DirectiveResolver } from '@angular/compiler/src/directive_resolver' ;
13
13
import { CompileMetadataResolver } from '@angular/compiler/src/metadata_resolver' ;
14
+ import { HtmlParser } from '@angular/compiler/src/ml_parser/html_parser' ;
15
+ import { DEFAULT_INTERPOLATION_CONFIG , InterpolationConfig } from '@angular/compiler/src/ml_parser/interpolation_config' ;
16
+ import { ParseTreeResult , Parser } from '@angular/compiler/src/ml_parser/parser' ;
14
17
import { NgModuleResolver } from '@angular/compiler/src/ng_module_resolver' ;
15
18
import { PipeResolver } from '@angular/compiler/src/pipe_resolver' ;
16
19
import { ResourceLoader } from '@angular/compiler/src/resource_loader' ;
@@ -39,6 +42,29 @@ export function createLanguageServiceFromTypescript(
39
42
return ngServer ;
40
43
}
41
44
45
+ /**
46
+ * The language service never needs the normalized versions of the metadata. To avoid parsing
47
+ * the content and resolving references, return an empty file. This also allows normalizing
48
+ * template that are syntatically incorrect which is required to provide completions in
49
+ * syntatically incorrect templates.
50
+ */
51
+ export class DummyHtmlParser extends HtmlParser {
52
+ constructor ( ) { super ( ) ; }
53
+
54
+ parse (
55
+ source : string , url : string , parseExpansionForms : boolean = false ,
56
+ interpolationConfig : InterpolationConfig = DEFAULT_INTERPOLATION_CONFIG ) : ParseTreeResult {
57
+ return new ParseTreeResult ( [ ] , [ ] ) ;
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Avoid loading resources in the language servcie by using a dummy loader.
63
+ */
64
+ export class DummyResourceLoader extends ResourceLoader {
65
+ get ( url : string ) : Promise < string > { return Promise . resolve ( '' ) ; }
66
+ }
67
+
42
68
/**
43
69
* An implemntation of a `LanguageSerivceHost` for a TypeScript project.
44
70
*
@@ -82,8 +108,9 @@ export class TypeScriptServiceHost implements LanguageServiceHost {
82
108
const directiveResolver = new DirectiveResolver ( this . reflector ) ;
83
109
const pipeResolver = new PipeResolver ( this . reflector ) ;
84
110
const elementSchemaRegistry = new DomElementSchemaRegistry ( ) ;
85
- const resourceLoader = new ResourceLoader ( ) ;
111
+ const resourceLoader = new DummyResourceLoader ( ) ;
86
112
const urlResolver = createOfflineCompileUrlResolver ( ) ;
113
+ const htmlParser = new DummyHtmlParser ( ) ;
87
114
// This tracks the CompileConfig in codegen.ts. Currently these options
88
115
// are hard-coded except for genDebugInfo which is not applicable as we
89
116
// never generate code.
@@ -94,7 +121,7 @@ export class TypeScriptServiceHost implements LanguageServiceHost {
94
121
useJit : false
95
122
} ) ;
96
123
const directiveNormalizer =
97
- new DirectiveNormalizer ( resourceLoader , urlResolver , null , config ) ;
124
+ new DirectiveNormalizer ( resourceLoader , urlResolver , htmlParser , config ) ;
98
125
99
126
result = this . _resolver = new CompileMetadataResolver (
100
127
moduleResolver , directiveResolver , pipeResolver , elementSchemaRegistry ,
0 commit comments