From 78da65706df06ee2c4471ea9d02066ad1fd4808d Mon Sep 17 00:00:00 2001 From: Bogdan Lyashenko Date: Sun, 10 Feb 2019 15:35:59 +0100 Subject: [PATCH] feat: add parsr fallbacl for js --- cli/index.cli.js | 18 +++++++++++++----- src/index.dev.js | 3 ++- src/server/code-parse/language/index.js | 12 ++++++++++-- src/server/index.js | 7 ++++--- src/server/source-watcher.js | 4 ++-- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/cli/index.cli.js b/cli/index.cli.js index 606b202..3d57167 100644 --- a/cli/index.cli.js +++ b/cli/index.cli.js @@ -1,5 +1,6 @@ #!/usr/bin/env node +const path = require('path'); const program = require('commander'); const colors = require('colors'); @@ -7,15 +8,21 @@ const server = require('../src/server'); program .option('-e, --entry [entryFile]', 'Specify path to entry point file. E.g. `./src/app.js`') - .option('-d, --dir [projectDir]', 'Specify path to project source code directory. E.g. `./src`') + .option( + '-d, --dir [projectDir]', + 'Specify path to project source code directory. E.g. `./src`', + '' + ) .option( '-w, --webpack [webpackConfigFile]', 'Specify path to webpack config file. E.g. ./webpack.config.js' ) .option('-p, --port [defaultPort]', 'Specify port for Codecrumbs client. E.g. 3333', 2018) + .option('-f, --parserFallback [astParserFallback]', 'Use AST parser fallback') + .option('-n, --projectName [projectNameAlias]', 'Project name alias') .parse(process.argv); -if (!program.entry && !program.dir) { +if (!program.entry || !program.dir) { console.log( colors.magenta( 'Please specify `entry` and `dir` params. E.g. `codecrumbs -e src/app.js -d src`' @@ -26,11 +33,12 @@ if (!program.entry && !program.dir) { server.setup( { - projectNameAlias: undefined, // TODO: add param for this + projectNameAlias: program.projectName, entryPoint: program.entry, - projectDir: program.dir, + projectDir: program.dir.replace(new RegExp(`${path.sep}$`), ''), webpackConfigPath: program.webpack, - clientPort: program.port + clientPort: program.port, + astParserFallback: program.parserFallback }, false ); diff --git a/src/index.dev.js b/src/index.dev.js index 94cf872..430cfe9 100644 --- a/src/index.dev.js +++ b/src/index.dev.js @@ -5,7 +5,8 @@ const namespaceOne = { projectDir: `example-project/src-client`, entryPoint: `example-project/src-client/index.js`, webpackConfigPath: `example-project/webpack.config.js`, - clientPort: 2018 + clientPort: 2018, + astParserFallback: false }; const namespaceTwo = { diff --git a/src/server/code-parse/language/index.js b/src/server/code-parse/language/index.js index 01c3cf3..e8dfcc7 100644 --- a/src/server/code-parse/language/index.js +++ b/src/server/code-parse/language/index.js @@ -2,7 +2,7 @@ // https://github.com/blakeembrey/language-map/blob/master/languages.json // copy(`/\.(${extensions.map(i=>i.slice(1)).join('|')})$/`) module.exports = { - detectLanguage: entryPoint => { + detectLanguage: (entryPoint, astParserFallback) => { const list = [ { language: 'cpp', @@ -27,10 +27,18 @@ module.exports = { { language: 'typescript', extensions: /.(ts|tsx)$/ - }, + } ]; const detection = list.find(item => item.extensions.test(entryPoint)); + // only case for JavaScript for now, because AST parser is used and can fail + if (detection && astParserFallback) { + return { + ...detection, + language: 'default' + }; + } + return detection ? detection : { language: 'default', extensions: /(.*?)/ }; }, getLanguageParsers: (language = 'default') => { diff --git a/src/server/index.js b/src/server/index.js index 741d5b6..d8696a4 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -8,7 +8,7 @@ const mediator = require('./mediator'); const sourceWatcher = require('./source-watcher'); const setup = ( - { projectNameAlias, projectDir, entryPoint, webpackConfigPath, clientPort }, + { projectNameAlias, projectDir, entryPoint, webpackConfigPath, clientPort, astParserFallback }, isDev ) => { const PORT_IN_USE = 'open'; @@ -46,12 +46,13 @@ const setup = ( { mediatorEndPoint: `${HOST}:${SERVER_PORT}`, namespace: `source-project-${Date.now()}`, - projectName: `project-${projectNameAlias || projectDir}` + projectName: `project:${projectNameAlias || projectDir}` }, { projectDir, entryPoint, - webpackConfigPath + webpackConfigPath, + astParserFallback } ); }); diff --git a/src/server/source-watcher.js b/src/server/source-watcher.js index bfc2067..d35ffed 100644 --- a/src/server/source-watcher.js +++ b/src/server/source-watcher.js @@ -9,9 +9,9 @@ const { detectLanguage } = require('./code-parse/language'); const run = ( { mediatorEndPoint, namespace, projectName }, - { projectDir, entryPoint, webpackConfigPath } + { projectDir, entryPoint, webpackConfigPath, astParserFallback } ) => { - const { language, extensions: fileExtensions } = detectLanguage(entryPoint); + const { language, extensions: fileExtensions } = detectLanguage(entryPoint, astParserFallback); const webSocketClient = new WebSocketClient();