import { Node, Literal, Identifier, MemberExpression } from "estree";

export function compare_node(a: Node | void, b: Node | void) {
	if (a === b) return true;
	if (!a || !b) return false;
	if (a.type !== b.type) return false;
	switch (a.type) {
		case "Identifier":
			return a.name === (b as Identifier).name;
		case "MemberExpression":
			return (
				compare_node(a.object, (b as MemberExpression).object) &&
				compare_node(a.property, (b as MemberExpression).property) &&
				a.computed === (b as MemberExpression).computed
      );
    case 'Literal':
      return a.value === (b as Literal).value;
	}
}