MCPcopy
hub / github.com/winjs/winjs / addModuleMember

Function addModuleMember

tools/dts-verifier/tscore.js:236–299  ·  view source on GitHub ↗
(member, moduleObject, qname)

Source from the content-addressed store, hash-verified

234// available until then.
235
236function addModuleMember(member, moduleObject, qname) {
237 current_node = member;
238 var topLevel = qname === '';
239 if (member instanceof TypeScript.FunctionDeclaration) {
240 var obj = moduleObject.getMember(member.name.text())
241 if (obj instanceof TObject) {
242 obj.calls.push(parseFunctionType(member))
243 } else {
244 throw new TypeError(member.name.text() + " is not a function")
245 }
246 }
247 else if (member instanceof TypeScript.VariableStatement) {
248 member.declaration.declarators.members.forEach(function(decl) {
249 moduleObject.setMember(decl.id.text(), parseType(decl.typeExpr))
250 })
251 }
252 else if (member instanceof TypeScript.ModuleDeclaration) {
253 var name = member.name.text()
254 if (member.isEnum()) { // enums are ModuleDeclarations in the AST, but they are semantically quite different
255 var enumObj = moduleObject.getModule(name)
256 var enumResult = parseEnum(member, enumObj, qname)
257 moduleObject.types.push(name, enumResult.enum)
258 } else {
259 if (name[0] === '"' || name[0] === "'") { // external module?
260 parseExternModule(member)
261 } else {
262 var submodule = moduleObject.getModule(name)
263 parseModule(member, submodule, qualify(qname, name))
264 }
265 }
266 }
267 else if (member instanceof TypeScript.ClassDeclaration) {
268 var name = member.name.text()
269 var clazzObj = moduleObject.getModule(name)
270 var clazz = parseClass(member, clazzObj, qname)
271 // moduleObject.setMember(member.name.text(), clazz.constructorType)
272 moduleObject.types.push(member.name.text(), clazz.instanceType)
273 }
274 else if (member instanceof TypeScript.InterfaceDeclaration) {
275 var name = member.name.text()
276 var t = parseInterface(member, qname)
277 moduleObject.types.push(name, t)
278 }
279 else if (member instanceof TypeScript.ImportDeclaration) {
280 var ref = parseType(member.alias)
281 if (topLevel || TypeScript.hasFlag(member.getVarFlags(), TypeScript.VariableFlags.Exported)) {
282 moduleObject.types.push(member.id.text(), ref)
283 } else {
284 // private alias to (potentially) publicly visible type
285 current_scope.env.push(member.id.text(), ref)
286 }
287 }
288 else if (member instanceof TypeScript.ExportAssignment) {
289 // XXX: I think we can actually just ignore these in the tscheck project,
290 // but for completeness, maybe we should export this information somehow
291 // For reference, this is what I *think* happens:
292 // declare module "foo" { export = X }
293 // This means import("foo") will return the value in global variable X.

Callers 2

parseModuleFunction · 0.85
parseTopLevelFunction · 0.85

Calls 11

parseFunctionTypeFunction · 0.85
parseTypeFunction · 0.85
parseEnumFunction · 0.85
parseExternModuleFunction · 0.85
parseModuleFunction · 0.85
qualifyFunction · 0.85
parseClassFunction · 0.85
parseInterfaceFunction · 0.85
textMethod · 0.80
pushMethod · 0.65
forEachMethod · 0.65

Tested by

no test coverage detected