tree-hugger-js
Version:
A friendly tree-sitter wrapper for JavaScript and TypeScript
60 lines • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LANGUAGES = void 0;
exports.detectLanguage = detectLanguage;
exports.getLanguageByName = getLanguageByName;
// Tree-sitter language modules - these don't have ES6 exports
const JavaScript = require('tree-sitter-javascript');
const TypeScript = require('tree-sitter-typescript').typescript;
const TSX = require('tree-sitter-typescript').tsx;
exports.LANGUAGES = [
{
name: 'javascript',
extensions: ['.js', '.mjs', '.cjs'],
parser: JavaScript,
},
{
name: 'typescript',
extensions: ['.ts'],
parser: TypeScript,
},
{
name: 'tsx',
extensions: ['.tsx', '.jsx'],
parser: TSX,
},
];
function detectLanguage(filenameOrCode) {
// Check if it's a filename with extension
const ext = filenameOrCode.match(/\.[^.]+$/)?.[0];
if (ext) {
const langByExt = exports.LANGUAGES.find(lang => lang.extensions.includes(ext));
if (langByExt)
return langByExt;
}
// Try to detect from code content
if (filenameOrCode.includes('import React') || filenameOrCode.includes('jsx')) {
return exports.LANGUAGES.find(lang => lang.name === 'tsx') ?? null;
}
if (filenameOrCode.includes(': ') ||
filenameOrCode.includes('interface ') ||
filenameOrCode.includes('type ')) {
return exports.LANGUAGES.find(lang => lang.name === 'typescript') ?? null;
}
// Some basic JavaScript detection
if (filenameOrCode.includes('function ') ||
filenameOrCode.includes('const ') ||
filenameOrCode.includes('let ') ||
filenameOrCode.includes('var ') ||
filenameOrCode.includes('=>') ||
filenameOrCode.includes('console.') ||
filenameOrCode.includes('class ')) {
return exports.LANGUAGES.find(lang => lang.name === 'javascript') ?? null;
}
// Return null if we can't detect the language
return null;
}
function getLanguageByName(name) {
return exports.LANGUAGES.find(lang => lang.name === name) ?? null;
}
//# sourceMappingURL=languages.js.map