Implement language autodetection (take that brace)

This commit is contained in:
Kristóf Tóth 2018-06-12 20:26:23 +02:00
parent 3a46f3e465
commit 39707c3aed
3 changed files with 57 additions and 2 deletions

View File

@ -30,6 +30,7 @@ export const config = {
showDeployButton: true,
reloadIframeOnDeploy: true,
showConsoleOnDeploy: true,
autoDetectFileLanguage: true
},
terminal: {
route: 'shell'

View File

@ -9,6 +9,7 @@ import { ProcessManagerService } from '../services/processmanager.service';
import { DeploymentNotificationService } from '../services/deployment-notification.service';
import { config } from '../config';
import { CommandMessage } from '../message-types/command-message';
import { LanguageMap } from './language-map';
enum DeployButtonState {
@ -45,10 +46,9 @@ export class IdeComponent implements OnInit {
showDeployButton: boolean = config.ide.showDeployButton;
autosave = null;
language: string = config.ide.defaultLanguage;
editorOptions = {
theme: 'vs-dark',
language: 'python',
language: config.ide.defaultLanguage,
glyphMargin: false,
minimap: {enabled: false}
};
@ -128,6 +128,9 @@ export class IdeComponent implements OnInit {
if (this.codeState === CodeState.SAVED) {
this.updateFileData(data);
}
if (config.ide.autoDetectFileLanguage) {
this.autoDetectEditorLanguage(data.filename);
}
}
writeHandler(data: CommandMessage) {
@ -138,6 +141,21 @@ export class IdeComponent implements OnInit {
this.updateFileData(data);
}
autoDetectEditorLanguage(filename: string) {
const extension = filename.substr(filename.lastIndexOf('.') + 1);
let language = LanguageMap[extension];
language = (language === undefined) ? 'text' : language;
this.setEditorLanguage(language);
}
setEditorLanguage(lang: string) {
this.editorOptions = Object.assign(
{},
this.editorOptions,
{ language: lang }
);
}
resetAutoSaveCountdown() {
if (this.autosave) {
clearInterval(this.autosave);

View File

@ -0,0 +1,36 @@
// Copyright (C) 2018 Avatao.com Innovative Learning Kft.
// All Rights Reserved. See LICENSE file for details.
export const LanguageMap: { [extension: string]: string; } = {
bat: 'bat',
clje: 'clojure',
coffee: 'coffee',
c: 'cpp',
h: 'cpp',
cpp: 'cpp',
hpp: 'cpp',
cs: 'csharp',
fs: 'fsharp',
go: 'go',
html: 'html',
java: 'java',
js: 'javascript',
ts: 'typescript',
lua: 'lua',
md: 'markdown',
m: 'objective-c',
mm: 'objective-c',
php: 'php',
py: 'python',
r: 'r',
rb: 'ruby',
rs: 'rust',
rlib: 'rust',
sql: 'sql',
swift: 'swift',
xml: 'xml',
yml: 'yaml',
css: 'css',
less: 'less',
scss: 'scss'
};