From 8155ed320740aa42576b8728676bf1f3e48c69f7 Mon Sep 17 00:00:00 2001 From: Bogdan Lyashenko Date: Sat, 9 Feb 2019 21:13:41 +0100 Subject: [PATCH] feat: finish multi lnaguage support --- example-project/languages/cpp-lang.cpp | 9 ++++ example-project/languages/java-lang.java | 9 ++++ example-project/languages/js-lang.js | 4 ++ example-project/languages/php-lang.php | 5 ++ example-project/languages/python-lang.py | 10 ++++ example-project/languages/ts-lang.ts | 4 ++ .../component/Icons/language/CppFile.js | 46 +++++++++++++++++++ .../component/Icons/language/File.js | 1 + .../component/Icons/language/PythonFile.js | 1 + .../treeDiagram/component/Node/File.js | 11 +++++ .../code-parse/language/cpp/codecrumbs.js | 9 ++++ .../code-parse/language/cpp/dependencies.js | 7 +++ .../code-parse/language/default/codecrumbs.js | 6 ++- src/server/code-parse/language/index.js | 34 +++++++++++++- .../code-parse/language/java/codecrumbs.js | 9 ++++ .../code-parse/language/java/dependencies.js | 7 +++ .../code-parse/language/php/codecrumbs.js | 9 ++++ .../code-parse/language/php/dependencies.js | 7 +++ .../language/typescript/codecrumbs.js | 9 ++++ .../language/typescript/dependencies.js | 7 +++ 20 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 example-project/languages/cpp-lang.cpp create mode 100644 example-project/languages/java-lang.java create mode 100644 example-project/languages/js-lang.js create mode 100644 example-project/languages/php-lang.php create mode 100644 example-project/languages/python-lang.py create mode 100644 example-project/languages/ts-lang.ts create mode 100644 src/public/js/components/treeDiagram/component/Icons/language/CppFile.js create mode 100644 src/server/code-parse/language/cpp/codecrumbs.js create mode 100644 src/server/code-parse/language/cpp/dependencies.js create mode 100644 src/server/code-parse/language/java/codecrumbs.js create mode 100644 src/server/code-parse/language/java/dependencies.js create mode 100644 src/server/code-parse/language/php/codecrumbs.js create mode 100644 src/server/code-parse/language/php/dependencies.js create mode 100644 src/server/code-parse/language/typescript/codecrumbs.js create mode 100644 src/server/code-parse/language/typescript/dependencies.js diff --git a/example-project/languages/cpp-lang.cpp b/example-project/languages/cpp-lang.cpp new file mode 100644 index 0000000..83bf30a --- /dev/null +++ b/example-project/languages/cpp-lang.cpp @@ -0,0 +1,9 @@ +#include +using namespace std; + +// cc:main function +int main() +{ + cout << "Hello, World!"; + return 0; +} \ No newline at end of file diff --git a/example-project/languages/java-lang.java b/example-project/languages/java-lang.java new file mode 100644 index 0000000..39a0585 --- /dev/null +++ b/example-project/languages/java-lang.java @@ -0,0 +1,9 @@ +public class HelloWorld { + + // cc: main function + public static void main(String[] args) { + // Prints "Hello, World" to the terminal window. + System.out.println("Hello, World"); + } + +} diff --git a/example-project/languages/js-lang.js b/example-project/languages/js-lang.js new file mode 100644 index 0000000..1a27f35 --- /dev/null +++ b/example-project/languages/js-lang.js @@ -0,0 +1,4 @@ +// cc:main function +function greeting() { + console.log('Hello world!'); +} \ No newline at end of file diff --git a/example-project/languages/php-lang.php b/example-project/languages/php-lang.php new file mode 100644 index 0000000..9ef6dc2 --- /dev/null +++ b/example-project/languages/php-lang.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/example-project/languages/python-lang.py b/example-project/languages/python-lang.py new file mode 100644 index 0000000..b69893b --- /dev/null +++ b/example-project/languages/python-lang.py @@ -0,0 +1,10 @@ +import sys + +# cc:main function +def main(argv=None): + if argv is None: + argv = sys.argv + + print "Hello, world" + + return \ No newline at end of file diff --git a/example-project/languages/ts-lang.ts b/example-project/languages/ts-lang.ts new file mode 100644 index 0000000..1a27f35 --- /dev/null +++ b/example-project/languages/ts-lang.ts @@ -0,0 +1,4 @@ +// cc:main function +function greeting() { + console.log('Hello world!'); +} \ No newline at end of file diff --git a/src/public/js/components/treeDiagram/component/Icons/language/CppFile.js b/src/public/js/components/treeDiagram/component/Icons/language/CppFile.js new file mode 100644 index 0000000..2cfdea8 --- /dev/null +++ b/src/public/js/components/treeDiagram/component/Icons/language/CppFile.js @@ -0,0 +1,46 @@ +import React from 'react'; +import { BLUE_COLOR } from '../../constants'; + +export default ({ x, y, width, height }) => ( + + + + + + + + + + + + + + + +); diff --git a/src/public/js/components/treeDiagram/component/Icons/language/File.js b/src/public/js/components/treeDiagram/component/Icons/language/File.js index 59ac714..cc4b814 100644 --- a/src/public/js/components/treeDiagram/component/Icons/language/File.js +++ b/src/public/js/components/treeDiagram/component/Icons/language/File.js @@ -11,6 +11,7 @@ export default ({ x, y, width, height }) => ( viewBox="0 0 512 512" shapeRendering={'geometricPrecision'} > + ( viewBox="0 0 548.291 548.291" shapeRendering={'geometricPrecision'} > + diff --git a/src/public/js/components/treeDiagram/component/Node/File.js b/src/public/js/components/treeDiagram/component/Node/File.js index a39a3e1..e44d07a 100644 --- a/src/public/js/components/treeDiagram/component/Node/File.js +++ b/src/public/js/components/treeDiagram/component/Node/File.js @@ -4,6 +4,7 @@ import classNames from 'classnames'; import { SYMBOL_WIDTH } from 'components/treeDiagram/component/constants'; import FileIcon from 'components/treeDiagram/component/Icons/language/File'; +import CppFileIcon from 'components/treeDiagram/component/Icons/language/CppFile'; import JavaScriptFileIcon from 'components/treeDiagram/component/Icons/language/JavaScriptFile'; import PythonFileIcon from 'components/treeDiagram/component/Icons/language/PythonFile'; @@ -12,6 +13,16 @@ import './index.scss'; const getFileIcon = ({ position, iconSize, language }) => { switch (language) { + case 'cpp': + return ( + + ); + case 'javascript': return ( (fileCode, path) => { } }; + +const DEFAULT_COMMENT_REGEX = /^([^\/\/]*)\/\/(.*)$/; +const getCrumbs = setupGetCrumbs(setupdGetCommentsFromCode(DEFAULT_COMMENT_REGEX)); + module.exports = { - getCrumbs: setupGetCrumbs(() => []), // TODO: add regexp for // comment + getCrumbs, setupdGetCommentsFromCode, setupGetCrumbs, diff --git a/src/server/code-parse/language/index.js b/src/server/code-parse/language/index.js index c2e3d83..01c3cf3 100644 --- a/src/server/code-parse/language/index.js +++ b/src/server/code-parse/language/index.js @@ -4,14 +4,30 @@ module.exports = { detectLanguage: entryPoint => { const list = [ + { + language: 'cpp', + extensions: /.(cpp|c\+\+|cc|cp|cxx|h|h\+\+|hh|hpp|hxx|inc|inl|ino|ipp|re|tcc|tpp)$/ + }, + { + language: 'java', + extensions: /.(java|jsp)$/ + }, { language: 'javascript', extensions: /\.(js|jsx|_js|bones|es|es6|frag|gs|jake|jsb|jscad|jsfl|jsm|jss|mjs|njs|pac|sjs|ssjs|xsjs|xsjslib)$/ }, + { + language: 'php', + extensions: /.(php|aw|ctp|fcgi|inc|php3|php4|php5|phps|phpt)$/ + }, { language: 'python', extensions: /\.(py|bzl|cgi|fcgi|gyp|gypi|lmi|py3|pyde|pyi|pyp|pyt|pyw|rpy|spec|tac|wsgi|xpy)$/ - } + }, + { + language: 'typescript', + extensions: /.(ts|tsx)$/ + }, ]; const detection = list.find(item => item.extensions.test(entryPoint)); @@ -19,14 +35,30 @@ module.exports = { }, getLanguageParsers: (language = 'default') => { const map = { + cpp: { + codecrumbsParser: require('./cpp/codecrumbs'), + dependenciesParser: require('./cpp/dependencies') + }, + java: { + codecrumbsParser: require('./java/codecrumbs'), + dependenciesParser: require('./java/dependencies') + }, javascript: { codecrumbsParser: require('./javascript/codecrumbs'), dependenciesParser: require('./javascript/dependencies') }, + php: { + codecrumbsParser: require('./php/codecrumbs'), + dependenciesParser: require('./php/dependencies') + }, python: { codecrumbsParser: require('./python/codecrumbs'), dependenciesParser: require('./python/dependencies') }, + typescript: { + codecrumbsParser: require('./typescript/codecrumbs'), + dependenciesParser: require('./typescript/dependencies') + }, default: { codecrumbsParser: require('./default/codecrumbs'), dependenciesParser: require('./default/dependencies') diff --git a/src/server/code-parse/language/java/codecrumbs.js b/src/server/code-parse/language/java/codecrumbs.js new file mode 100644 index 0000000..bc95181 --- /dev/null +++ b/src/server/code-parse/language/java/codecrumbs.js @@ -0,0 +1,9 @@ +const { setupGetCrumbs, setupdGetCommentsFromCode } = require('../default/codecrumbs'); + +const JAVA_COMMENT_REGEX = /^([^\/\/]*)\/\/(.*)$/; +const getCrumbs = setupGetCrumbs(setupdGetCommentsFromCode(JAVA_COMMENT_REGEX)); + +// replace with own implementation if needed +module.exports = { + getCrumbs +}; diff --git a/src/server/code-parse/language/java/dependencies.js b/src/server/code-parse/language/java/dependencies.js new file mode 100644 index 0000000..202c0a2 --- /dev/null +++ b/src/server/code-parse/language/java/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/php/codecrumbs.js b/src/server/code-parse/language/php/codecrumbs.js new file mode 100644 index 0000000..182ed20 --- /dev/null +++ b/src/server/code-parse/language/php/codecrumbs.js @@ -0,0 +1,9 @@ +const { setupGetCrumbs, setupdGetCommentsFromCode } = require('../default/codecrumbs'); + +const PHP_COMMENT_REGEX = /^([^\/\/]*)\/\/(.*)$/; +const getCrumbs = setupGetCrumbs(setupdGetCommentsFromCode(PHP_COMMENT_REGEX)); + +// replace with own implementation if needed +module.exports = { + getCrumbs +}; diff --git a/src/server/code-parse/language/php/dependencies.js b/src/server/code-parse/language/php/dependencies.js new file mode 100644 index 0000000..202c0a2 --- /dev/null +++ b/src/server/code-parse/language/php/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/typescript/codecrumbs.js b/src/server/code-parse/language/typescript/codecrumbs.js new file mode 100644 index 0000000..90584dc --- /dev/null +++ b/src/server/code-parse/language/typescript/codecrumbs.js @@ -0,0 +1,9 @@ +const { setupGetCrumbs, setupdGetCommentsFromCode } = require('../default/codecrumbs'); + +const TYPE_SCRIPT_COMMENT_REGEX = /^([^\/\/]*)\/\/(.*)$/; +const getCrumbs = setupGetCrumbs(setupdGetCommentsFromCode(TYPE_SCRIPT_COMMENT_REGEX)); + +// replace with own implementation if needed +module.exports = { + getCrumbs +}; diff --git a/src/server/code-parse/language/typescript/dependencies.js b/src/server/code-parse/language/typescript/dependencies.js new file mode 100644 index 0000000..202c0a2 --- /dev/null +++ b/src/server/code-parse/language/typescript/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 +};