From e8d08572c618e31f8ac1cf9609dbbf6033c78597 Mon Sep 17 00:00:00 2001 From: Ivan Verevkin Date: Wed, 17 Jul 2019 14:37:59 +0200 Subject: [PATCH 1/2] feature: added perl language --- example-project/languages/perl-lang.pl | 7 +++++++ src/server/code-parse/language/index.js | 1 + src/server/code-parse/language/perl/codecrumbs.js | 9 +++++++++ src/server/code-parse/language/perl/dependencies.js | 7 +++++++ src/server/code-parse/language/perl/extensions.js | 1 + 5 files changed, 25 insertions(+) create mode 100644 example-project/languages/perl-lang.pl create mode 100644 src/server/code-parse/language/perl/codecrumbs.js create mode 100644 src/server/code-parse/language/perl/dependencies.js create mode 100644 src/server/code-parse/language/perl/extensions.js diff --git a/example-project/languages/perl-lang.pl b/example-project/languages/perl-lang.pl new file mode 100644 index 0000000..2bdfbe5 --- /dev/null +++ b/example-project/languages/perl-lang.pl @@ -0,0 +1,7 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +# cc: main function. +print "Hello, World!\n"; diff --git a/src/server/code-parse/language/index.js b/src/server/code-parse/language/index.js index 6c8773e..660f88e 100644 --- a/src/server/code-parse/language/index.js +++ b/src/server/code-parse/language/index.js @@ -11,6 +11,7 @@ const LANGUAGES = [ 'java', 'javascript', 'kotlin', + 'perl', 'php', 'python', 'ruby', diff --git a/src/server/code-parse/language/perl/codecrumbs.js b/src/server/code-parse/language/perl/codecrumbs.js new file mode 100644 index 0000000..898206a --- /dev/null +++ b/src/server/code-parse/language/perl/codecrumbs.js @@ -0,0 +1,9 @@ +const { setupGetCrumbs, setupGetCommentsFromCode } = require('../default/codecrumbs'); + +const PERL_COMMENT_REGEX = /^([^#]*)#(.*)$/; +const getCrumbs = setupGetCrumbs(setupGetCommentsFromCode(PERL_COMMENT_REGEX)); + +// replace with own implementation if needed +module.exports = { + getCrumbs +}; diff --git a/src/server/code-parse/language/perl/dependencies.js b/src/server/code-parse/language/perl/dependencies.js new file mode 100644 index 0000000..202c0a2 --- /dev/null +++ b/src/server/code-parse/language/perl/dependencies.js @@ -0,0 +1,7 @@ +const defaultDependencies = require('../default/dependencies'); + +// replace with own implementation if needed +module.exports = { + getImports: defaultDependencies.getImports, + getDependencies: defaultDependencies.getDependencies +}; diff --git a/src/server/code-parse/language/perl/extensions.js b/src/server/code-parse/language/perl/extensions.js new file mode 100644 index 0000000..fdd6b29 --- /dev/null +++ b/src/server/code-parse/language/perl/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(pl|al|cgi|fcgi|perl|ph|plx|pm|psgi|t|6pl|6pm|nqp|p6|p6l|p6m|pl|pl6|pm|pm6)$/; From 2f22563d8d429899a7a84b33b384fe1882e5fc5c Mon Sep 17 00:00:00 2001 From: Ivan Verevkin Date: Thu, 18 Jul 2019 15:28:55 +0200 Subject: [PATCH 2/2] chore: refactor project source --- src/server/mediator.js | 26 +++++++++++------------- src/server/project-source/file-system.js | 8 ++++++-- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/server/mediator.js b/src/server/mediator.js index 9c49fbe..cdb24fb 100644 --- a/src/server/mediator.js +++ b/src/server/mediator.js @@ -5,6 +5,10 @@ const { SOCKET_MSG_MAX_SIZE } = require('./config'); const logger = require('./utils/logger'); const { SOCKET_MESSAGE_TYPE } = require('./shared-constants'); +const connectedJSON = JSON.stringify({ + type: SOCKET_MESSAGE_TYPE.CLIENT_CONNECTED +}) + // instances should run on many ports but then send data to mediator and mediator to client const run = ({ port, clientPort }) => { const httpServer = http.createServer(); @@ -29,22 +33,10 @@ const run = ({ port, clientPort }) => { if (isClient) { clientInstance = connection; logger.info('> browser client connected'); - sendToSourceWatchers( - JSON.stringify({ - type: SOCKET_MESSAGE_TYPE.CLIENT_CONNECTED - }) - ); + sendToSourceWatchers(connectedJSON); } else { sourceWatcherInstances.push(connection); - - // if client already there just init watcher - if (clientInstance) { - connection.sendUTF( - JSON.stringify({ - type: SOCKET_MESSAGE_TYPE.CLIENT_CONNECTED - }) - ); - } + initWatcherIfClientExist(client, connection) } connection.on('message', ({ utf8Data }) => { @@ -61,6 +53,12 @@ const run = ({ port, clientPort }) => { }); }; +function initWatcherIfClientExist (client, connection) { + if (client) { + connection.sendUTF(connectedJSON) + } +} + module.exports = { run }; diff --git a/src/server/project-source/file-system.js b/src/server/project-source/file-system.js index 8fd7dfd..01578d1 100644 --- a/src/server/project-source/file-system.js +++ b/src/server/project-source/file-system.js @@ -3,7 +3,11 @@ const directoryTree = require('directory-tree'); const { traversal: treeTraversal } = require('../utils/tree'); const { DIR_NODE_TYPE } = require('../shared-constants'); -const getProjectFiles = (projectDir, config = { extensions: /(.*?)/ }) => { +const DEFAULT_EXTENSION_REGEX = require('../code-parse/language/default/extensions') +const DEFAULT_CONFIG = { extensions: DEFAULT_EXTENSION_REGEX } +const NO_FILES_ERROR = 'There is not files found. Please check source dir and entry point configs.'; + +const getProjectFiles = (projectDir, config = DEFAULT_CONFIG) => { const filesMap = {}; const foldersMap = {}; @@ -12,7 +16,7 @@ const getProjectFiles = (projectDir, config = { extensions: /(.*?)/ }) => { }); if (!Object.keys(filesMap).length) { - throw new Error('There is not files found. Please check source dir and entry point configs.'); + throw new Error(NO_FILES_ERROR); } treeTraversal(sourceTree, node => {