diff --git a/example-project/languages/ruby-lang.rb b/example-project/languages/ruby-lang.rb index 0518ab2..c28432d 100644 --- a/example-project/languages/ruby-lang.rb +++ b/example-project/languages/ruby-lang.rb @@ -1,3 +1,3 @@ # cc:main function -puts 'Hello, world!' \ No newline at end of file +puts 'Hello, world!' diff --git a/src/server/code-parse/language/cpp/extensions.js b/src/server/code-parse/language/cpp/extensions.js new file mode 100644 index 0000000..847685e --- /dev/null +++ b/src/server/code-parse/language/cpp/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(cpp|c\+\+|cc|cp|cxx|h|h\+\+|hh|hpp|hxx|inc|inl|ino|ipp|re|tcc|tpp)$/; diff --git a/src/server/code-parse/language/csharp/extensions.js b/src/server/code-parse/language/csharp/extensions.js new file mode 100644 index 0000000..2e30ec6 --- /dev/null +++ b/src/server/code-parse/language/csharp/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(cs|cake|cshtml|csx)$/; diff --git a/src/server/code-parse/language/default/extensions.js b/src/server/code-parse/language/default/extensions.js new file mode 100644 index 0000000..29dc4bf --- /dev/null +++ b/src/server/code-parse/language/default/extensions.js @@ -0,0 +1 @@ +module.exports = /(.*?)/ diff --git a/src/server/code-parse/language/fortran/extensions.js b/src/server/code-parse/language/fortran/extensions.js new file mode 100644 index 0000000..183bc37 --- /dev/null +++ b/src/server/code-parse/language/fortran/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(f90|f|f03|f08|f77|f95|for|fpp)$/; diff --git a/src/server/code-parse/language/golang/extensions.js b/src/server/code-parse/language/golang/extensions.js new file mode 100644 index 0000000..69a4d27 --- /dev/null +++ b/src/server/code-parse/language/golang/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(go)$/; diff --git a/src/server/code-parse/language/haskell/extensions.js b/src/server/code-parse/language/haskell/extensions.js new file mode 100644 index 0000000..164499c --- /dev/null +++ b/src/server/code-parse/language/haskell/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(hs|hsc)$/; diff --git a/src/server/code-parse/language/index.js b/src/server/code-parse/language/index.js index 16d8667..aa4f68c 100644 --- a/src/server/code-parse/language/index.js +++ b/src/server/code-parse/language/index.js @@ -1,110 +1,63 @@ // check extensions // https://github.com/blakeembrey/language-map/blob/master/languages.json // copy(`/\.(${extensions.map(i=>i.slice(1)).join('|')})$/`) + +const LANGUAGES = [ + 'cpp', + 'csharp', + 'fortran', + 'golang', + 'haskell', + 'java', + 'javascript', + 'kotlin', + 'php', + 'python', + 'ruby', + 'typescript' +]; + +const PARSERS = ['default', ...LANGUAGES]; + +const getExtensions = parserName => require(`./${parserName}/extensions`); + +const LANGUAGE_LIST = LANGUAGES.map(language => { + return { + language, + extensions: getExtensions(language) + }; +}); + +const DEFAULT_PARSER = { + language: 'default', + extensions: getExtensions('default') +}; + 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: 'csharp', - extensions: /\.(cs|cake|cshtml|csx)$/ - }, - { - language: 'fortran', - extensions: /\.(f90|f|f03|f08|f77|f95|for|fpp)$/ - }, - { - language: 'haskell', - extensions: /\.(hs|hsc)$/ - }, - { - 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|vue|xsjs|xsjslib)$/ - }, - { - language: 'kotlin', - extensions: /\.(kt|ktm|kts)$/ - }, - { - 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: 'ruby', - extensions: /\.(rb|builder|eye|fcgi|gemspec|god|jbuilder|mspec|pluginspec|podspec|rabl|rake|rbuild|rbw|rbx|ru|ruby|spec|thor|watchr)$/ - }, - { - language: 'typescript', - extensions: /\.(ts|tsx)$/ - } - ]; + detectLanguage: entryPoint => { + const detection = LANGUAGE_LIST.find(language => { + return language.extensions.test(entryPoint); + }); - const detection = list.find(item => item.extensions.test(entryPoint)); - return detection ? detection : { language: 'default', extensions: /(.*?)/ }; + return detection ? detection : DEFAULT_PARSER; }, - getLanguageParsers: (language = 'default') => { - const map = { - cpp: { - codecrumbsParser: require('./cpp/codecrumbs'), - dependenciesParser: require('./cpp/dependencies') - }, - csharp: { - codecrumbsParser: require('./csharp/codecrumbs'), - dependenciesParser: require('./csharp/dependencies') - }, - fortran: { - codecrumbsParser: require('./fortran/codecrumbs'), - dependenciesParser: require('./fortran/dependencies') - }, - haskell: { - codecrumbsParser: require('./haskell/codecrumbs'), - dependenciesParser: require('./haskell/dependencies') - }, - java: { - codecrumbsParser: require('./java/codecrumbs'), - dependenciesParser: require('./java/dependencies') - }, - javascript: { - codecrumbsParser: require('./javascript/codecrumbs'), - dependenciesParser: require('./javascript/dependencies') - }, - kotlin: { - codecrumbsParser: require('./kotlin/codecrumbs'), - dependenciesParser: require('./kotlin/dependencies') - }, - php: { - codecrumbsParser: require('./php/codecrumbs'), - dependenciesParser: require('./php/dependencies') - }, - python: { - codecrumbsParser: require('./python/codecrumbs'), - dependenciesParser: require('./python/dependencies') - }, - ruby: { - codecrumbsParser: require('./ruby/codecrumbs'), - dependenciesParser: require('./ruby/dependencies') - }, - typescript: { - codecrumbsParser: require('./typescript/codecrumbs'), - dependenciesParser: require('./typescript/dependencies') - }, - default: { - codecrumbsParser: require('./default/codecrumbs'), - dependenciesParser: require('./default/dependencies') - } - }; - return map[language] || map.default; + getLanguageParsers: (language = 'default') => { + return ( + PARSERS.reduce((target, parser) => { + return target.set(parser, getPropertiesByParser(parser)); + }, new Map()).get(language) || map.default + ); + } +}; + +const getPropertiesByParser = parser => { + if (typeof parser === 'string' || parser instanceof String) { + return { + codecrumbsParser: require(`./${parser}/codecrumbs`), + dependenciesParser: require(`./${parser}/dependencies`) + }; + } else { + throw 'Invalid parser name'; } }; diff --git a/src/server/code-parse/language/java/extensions.js b/src/server/code-parse/language/java/extensions.js new file mode 100644 index 0000000..f02d040 --- /dev/null +++ b/src/server/code-parse/language/java/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(java|jsp)$/; diff --git a/src/server/code-parse/language/javascript/extensions.js b/src/server/code-parse/language/javascript/extensions.js new file mode 100644 index 0000000..7df2b7c --- /dev/null +++ b/src/server/code-parse/language/javascript/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(js|jsx|_js|bones|es|es6|frag|gs|jake|jsb|jscad|jsfl|jsm|jss|mjs|njs|pac|sjs|ssjs|vue|xsjs|xsjslib)$/; diff --git a/src/server/code-parse/language/kotlin/extensions.js b/src/server/code-parse/language/kotlin/extensions.js new file mode 100644 index 0000000..5ddf5ba --- /dev/null +++ b/src/server/code-parse/language/kotlin/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(kt|ktm|kts)$/; diff --git a/src/server/code-parse/language/php/extensions.js b/src/server/code-parse/language/php/extensions.js new file mode 100644 index 0000000..0f0eb3f --- /dev/null +++ b/src/server/code-parse/language/php/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(php|aw|ctp|fcgi|inc|php3|php4|php5|phps|phpt)$/; diff --git a/src/server/code-parse/language/python/extensions.js b/src/server/code-parse/language/python/extensions.js new file mode 100644 index 0000000..c15a56a --- /dev/null +++ b/src/server/code-parse/language/python/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(py|bzl|cgi|fcgi|gyp|gypi|lmi|py3|pyde|pyi|pyp|pyt|pyw|rpy|spec|tac|wsgi|xpy)$/; diff --git a/src/server/code-parse/language/ruby/extensions.js b/src/server/code-parse/language/ruby/extensions.js new file mode 100644 index 0000000..d9940d0 --- /dev/null +++ b/src/server/code-parse/language/ruby/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(rb|builder|eye|fcgi|gemspec|god|jbuilder|mspec|pluginspec|podspec|rabl|rake|rbuild|rbw|rbx|ru|ruby|spec|thor|watchr)$/; diff --git a/src/server/code-parse/language/typescript/extensions.js b/src/server/code-parse/language/typescript/extensions.js new file mode 100644 index 0000000..87fd7e7 --- /dev/null +++ b/src/server/code-parse/language/typescript/extensions.js @@ -0,0 +1 @@ +module.exports = /\.(ts|tsx)$/;