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 cefa0c4..1c20aa5 100644 --- a/src/server/code-parse/language/index.js +++ b/src/server/code-parse/language/index.js @@ -12,6 +12,7 @@ const LANGUAGES = [ 'javascript', 'kotlin', 'ocaml', + '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)$/; 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 => {