MCPcopy Index your code
hub / github.com/nodejs/node / checkClassForDuplicateDeclarations

Function checkClassForDuplicateDeclarations

test/fixtures/snapshot/typescript.js:80253–80326  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

80251 }
80252 }
80253 function checkClassForDuplicateDeclarations(node) {
80254 var instanceNames = new ts.Map();
80255 var staticNames = new ts.Map();
80256 // instance and static private identifiers share the same scope
80257 var privateIdentifiers = new ts.Map();
80258 for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
80259 var member = _a[_i];
80260 if (member.kind === 171 /* SyntaxKind.Constructor */) {
80261 for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
80262 var param = _c[_b];
80263 if (ts.isParameterPropertyDeclaration(param, member) && !ts.isBindingPattern(param.name)) {
80264 addName(instanceNames, param.name, param.name.escapedText, 3 /* DeclarationMeaning.GetOrSetAccessor */);
80265 }
80266 }
80267 }
80268 else {
80269 var isStaticMember = ts.isStatic(member);
80270 var name = member.name;
80271 if (!name) {
80272 continue;
80273 }
80274 var isPrivate = ts.isPrivateIdentifier(name);
80275 var privateStaticFlags = isPrivate && isStaticMember ? 16 /* DeclarationMeaning.PrivateStatic */ : 0;
80276 var names = isPrivate ? privateIdentifiers :
80277 isStaticMember ? staticNames :
80278 instanceNames;
80279 var memberName = name && ts.getPropertyNameForPropertyNameNode(name);
80280 if (memberName) {
80281 switch (member.kind) {
80282 case 172 /* SyntaxKind.GetAccessor */:
80283 addName(names, name, memberName, 1 /* DeclarationMeaning.GetAccessor */ | privateStaticFlags);
80284 break;
80285 case 173 /* SyntaxKind.SetAccessor */:
80286 addName(names, name, memberName, 2 /* DeclarationMeaning.SetAccessor */ | privateStaticFlags);
80287 break;
80288 case 167 /* SyntaxKind.PropertyDeclaration */:
80289 addName(names, name, memberName, 3 /* DeclarationMeaning.GetOrSetAccessor */ | privateStaticFlags);
80290 break;
80291 case 169 /* SyntaxKind.MethodDeclaration */:
80292 addName(names, name, memberName, 8 /* DeclarationMeaning.Method */ | privateStaticFlags);
80293 break;
80294 }
80295 }
80296 }
80297 }
80298 function addName(names, location, name, meaning) {
80299 var prev = names.get(name);
80300 if (prev) {
80301 // For private identifiers, do not allow mixing of static and instance members with the same name
80302 if ((prev & 16 /* DeclarationMeaning.PrivateStatic */) !== (meaning & 16 /* DeclarationMeaning.PrivateStatic */)) {
80303 error(location, ts.Diagnostics.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name, ts.getTextOfNode(location));
80304 }
80305 else {
80306 var prevIsMethod = !!(prev & 8 /* DeclarationMeaning.Method */);
80307 var isMethod = !!(meaning & 8 /* DeclarationMeaning.Method */);
80308 if (prevIsMethod || isMethod) {
80309 if (prevIsMethod !== isMethod) {
80310 error(location, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(location));

Callers 1

Calls 1

addNameFunction · 0.85

Tested by

no test coverage detected