Skip to content
This repository has been archived by the owner on Mar 13, 2024. It is now read-only.

Commit

Permalink
MM-18919 Migrate 'utils/syntax_highlighting' to TypeScript (#3862)
Browse files Browse the repository at this point in the history
* MM-18919 Migrate 'utils/syntax_highlighting' to TypeScript

* MM-18919 Migrate 'utils/syntax_highlighting' to TypeScript - install correct package

* MM-18919 - Address review feedback

* MM-18919: fix lint error
  • Loading branch information
FlaviaBastos authored and devinbinnie committed Nov 11, 2019
1 parent 15866e5 commit 97fd5cb
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 16 deletions.
4 changes: 2 additions & 2 deletions components/code_preview.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import $ from 'jquery';
import PropTypes from 'prop-types';
import React from 'react';

import Constants from 'utils/constants';
import * as SyntaxHighlighting from 'utils/syntax_highlighting.jsx';
import Constants from 'utils/constants.jsx';
import * as SyntaxHighlighting from 'utils/syntax_highlighting';

import LoadingSpinner from 'components/widgets/loading/loading_spinner';
import FileInfoPreview from 'components/file_info_preview';
Expand Down
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"version": "0.0.1",
"private": true,
"dependencies": {
"@types/highlight.js": "9.12.3",
"@formatjs/intl-pluralrules": "1.3.1",
"@formatjs/intl-relativetimeformat": "4.4.0",
"@typescript-eslint/parser": "2.6.0",
Expand Down
62 changes: 62 additions & 0 deletions types/highlightjs.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

declare module 'highlight.js/lib/languages/actionscript.js';
declare module 'highlight.js/lib/languages/applescript.js';
declare module 'highlight.js/lib/languages/bash.js';
declare module 'highlight.js/lib/languages/clojure.js';
declare module 'highlight.js/lib/languages/coffeescript.js';
declare module 'highlight.js/lib/languages/cpp.js';
declare module 'highlight.js/lib/languages/cs.js';
declare module 'highlight.js/lib/languages/css.js';
declare module 'highlight.js/lib/languages/d.js';
declare module 'highlight.js/lib/languages/dart.js';
declare module 'highlight.js/lib/languages/delphi.js';
declare module 'highlight.js/lib/languages/diff.js';
declare module 'highlight.js/lib/languages/django.js';
declare module 'highlight.js/lib/languages/dockerfile.js';
declare module 'highlight.js/lib/languages/elixir.js';
declare module 'highlight.js/lib/languages/erlang.js';
declare module 'highlight.js/lib/languages/fortran.js';
declare module 'highlight.js/lib/languages/fsharp.js';
declare module 'highlight.js/lib/languages/gcode.js';
declare module 'highlight.js/lib/languages/go.js';
declare module 'highlight.js/lib/languages/groovy.js';
declare module 'highlight.js/lib/languages/handlebars.js';
declare module 'highlight.js/lib/languages/haskell.js';
declare module 'highlight.js/lib/languages/haxe.js';
declare module 'highlight.js/lib/languages/java.js';
declare module 'highlight.js/lib/languages/javascript.js';
declare module 'highlight.js/lib/languages/json.js';
declare module 'highlight.js/lib/languages/julia.js';
declare module 'highlight.js/lib/languages/kotlin.js';
declare module 'highlight.js/lib/languages/less.js';
declare module 'highlight.js/lib/languages/lisp.js';
declare module 'highlight.js/lib/languages/lua.js';
declare module 'highlight.js/lib/languages/makefile.js';
declare module 'highlight.js/lib/languages/markdown.js';
declare module 'highlight.js/lib/languages/matlab.js';
declare module 'highlight.js/lib/languages/objectivec.js';
declare module 'highlight.js/lib/languages/ocaml.js';
declare module 'highlight.js/lib/languages/perl.js';
declare module 'highlight.js/lib/languages/php.js';
declare module 'highlight.js/lib/languages/powershell.js';
declare module 'highlight.js/lib/languages/puppet.js';
declare module 'highlight.js/lib/languages/python.js';
declare module 'highlight.js/lib/languages/r.js';
declare module 'highlight.js/lib/languages/ruby.js';
declare module 'highlight.js/lib/languages/rust.js';
declare module 'highlight.js/lib/languages/scala.js';
declare module 'highlight.js/lib/languages/scheme.js';
declare module 'highlight.js/lib/languages/scss.js';
declare module 'highlight.js/lib/languages/smalltalk.js';
declare module 'highlight.js/lib/languages/sql.js';
declare module 'highlight.js/lib/languages/stylus.js';
declare module 'highlight.js/lib/languages/swift.js';
declare module 'highlight.js/lib/languages/tex.js';
declare module 'highlight.js/lib/languages/vbnet.js';
declare module 'highlight.js/lib/languages/vbscript.js';
declare module 'highlight.js/lib/languages/verilog.js';
declare module 'highlight.js/lib/languages/vhdl.js';
declare module 'highlight.js/lib/languages/xml.js';
declare module 'highlight.js/lib/languages/yaml.js';
2 changes: 1 addition & 1 deletion utils/markdown/renderer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import marked from 'marked';

import * as PostUtils from 'utils/post_utils.jsx';
import * as SyntaxHighlighting from 'utils/syntax_highlighting.jsx';
import * as SyntaxHighlighting from 'utils/syntax_highlighting';
import * as TextFormatting from 'utils/text_formatting.jsx';
import {getScheme, isUrlSafe} from 'utils/url';

Expand Down
38 changes: 25 additions & 13 deletions utils/syntax_highlighting.jsx → utils/syntax_highlighting.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import hlJS from 'highlight.js/lib/highlight.js';
import hlJS from 'highlight.js';
import hljsActionscript from 'highlight.js/lib/languages/actionscript.js';
import hljsApplescript from 'highlight.js/lib/languages/applescript.js';
import hljsBash from 'highlight.js/lib/languages/bash.js';
Expand Down Expand Up @@ -62,7 +62,7 @@ import hljsVhdl from 'highlight.js/lib/languages/vhdl.js';
import hljsXml from 'highlight.js/lib/languages/xml.js';
import hljsYaml from 'highlight.js/lib/languages/yaml.js';

import Constants from './constants';
import Constants from './constants.jsx';
import * as TextFormatting from './text_formatting.jsx';

hlJS.registerLanguage('actionscript', hljsActionscript);
Expand Down Expand Up @@ -125,10 +125,18 @@ hlJS.registerLanguage('vhdl', hljsVhdl);
hlJS.registerLanguage('xml', hljsXml);
hlJS.registerLanguage('yaml', hljsYaml);

const HighlightedLanguages = Constants.HighlightedLanguages;
type languageObject = {
[key: string]: {
name: string;
extensions: string[];
aliases?: string[];
};
}

const HighlightedLanguages: languageObject = Constants.HighlightedLanguages;

// This function add line numbers to code
function formatHighLight(code) {
function formatHighLight(code: string) {
if (code) {
return code.split('\n').map((str, index) => {
if (str || str === '') {
Expand All @@ -149,7 +157,7 @@ function formatHighLight(code) {
return code;
}

export function highlight(lang, code) {
export function highlight(lang: string, code: string) {
const language = getLanguageFromNameOrAlias(lang);

if (language) {
Expand All @@ -164,30 +172,34 @@ export function highlight(lang, code) {
return TextFormatting.sanitizeHtml(code);
}

export function getLanguageFromFileExtension(extension) {
for (var key in HighlightedLanguages) {
if (HighlightedLanguages[key].extensions.find((x) => x === extension)) {
export function getLanguageFromFileExtension(extension: string): string | null {
for (const key in HighlightedLanguages) {
if (HighlightedLanguages[key].extensions.find((x: string) => x === extension)) {
return key;
}
}

return null;
}

export function canHighlight(language) {
export function canHighlight(language: string): boolean {
return Boolean(getLanguageFromNameOrAlias(language));
}

export function getLanguageName(language) {
export function getLanguageName(language: string): string {
if (canHighlight(language)) {
return HighlightedLanguages[getLanguageFromNameOrAlias(language)].name;
const name: string | undefined = getLanguageFromNameOrAlias(language);
if (!name) {
return '';
}
return HighlightedLanguages[name].name;
}

return '';
}

function getLanguageFromNameOrAlias(name) {
const langName = name.toLowerCase();
function getLanguageFromNameOrAlias(name: string) {
const langName: string = name.toLowerCase();
if (HighlightedLanguages[langName]) {
return langName;
}
Expand Down

0 comments on commit 97fd5cb

Please sign in to comment.