formatLocation.js 1.27 KB
/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/

"use strict";

const formatPosition = (pos) => {
	if(pos === null)
		return "";
	const typeOfPos = typeof pos;
	switch(typeOfPos) {
		case "string":
			return pos;
		case "number":
			return `${pos}`;
		case "object":
			if(typeof pos.line === "number" && typeof pos.column === "number")
				return `${pos.line}:${pos.column}`;
			else if(typeof pos.line === "number")
				return `${pos.line}:?`;
			else if(typeof pos.index === "number")
				return `+${pos.index}`;
			else
				return "";
		default:
			return "";
	}
};

const formatLocation = (loc) => {
	if(loc === null)
		return "";
	const typeOfLoc = typeof loc;
	switch(typeOfLoc) {
		case "string":
			return loc;
		case "number":
			return `${loc}`;
		case "object":
			if(loc.start && loc.end) {
				if(typeof loc.start.line === "number" && typeof loc.end.line === "number" && typeof loc.end.column === "number" && loc.start.line === loc.end.line)
					return `${formatPosition(loc.start)}-${loc.end.column}`;
				return `${formatPosition(loc.start)}-${formatPosition(loc.end)}`;
			}
			if(loc.start)
				return formatPosition(loc.start);
			return formatPosition(loc);
		default:
			return "";
	}
};

module.exports = formatLocation;