feat: add colour highlight for codesnippet (#5006)

Co-authored-by: jamesgeorge007 <25279263+jamesgeorge007@users.noreply.github.com>
This commit is contained in:
Nivedin 2025-04-24 16:54:18 +05:30 committed by GitHub
parent 236db8396b
commit f1b1a8894b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 62 additions and 3 deletions

View file

@ -45,6 +45,7 @@
@click="
() => {
codegenType = codegen.name
codegenMode = codegen.lang
hide()
}
"
@ -124,6 +125,7 @@ import {
CodegenDefinitions,
CodegenName,
generateCode,
CodegenLang,
} from "~/helpers/new-codegen"
import {
getEffectiveRESTRequest,
@ -171,6 +173,7 @@ const currentActiveTabDocument = computed(() =>
)
const codegenType = ref<CodegenName>("shell-curl")
const codegenMode = ref<CodegenLang>("shell")
const errorState = ref(false)
defineProps({
@ -289,7 +292,7 @@ useCodemirror(
requestCode,
reactive({
extendedEditorConfig: {
mode: "text/plain",
mode: codegenMode,
readOnly: true,
lineWrapping: WRAP_LINES,
},

View file

@ -30,6 +30,16 @@ import { GQLLanguage } from "@hoppscotch/codemirror-lang-graphql"
import { html } from "@codemirror/legacy-modes/mode/xml"
import { shell } from "@codemirror/legacy-modes/mode/shell"
import { yaml } from "@codemirror/legacy-modes/mode/yaml"
import { rust } from "@codemirror/legacy-modes/mode/rust"
import { go } from "@codemirror/legacy-modes/mode/go"
import { clojure } from "@codemirror/legacy-modes/mode/clojure"
import { http } from "@codemirror/legacy-modes/mode/http"
import { csharp, java } from "@codemirror/legacy-modes/mode/clike"
import { powerShell } from "@codemirror/legacy-modes/mode/powershell"
import { python } from "@codemirror/legacy-modes/mode/python"
import { r } from "@codemirror/legacy-modes/mode/r"
import { ruby } from "@codemirror/legacy-modes/mode/ruby"
import { swift } from "@codemirror/legacy-modes/mode/swift"
import { isJSONContentType } from "@helpers/utils/contenttypes"
import { useStreamSubscriber } from "@composables/stream"
import { Completer } from "@helpers/editor/completion"
@ -157,10 +167,45 @@ const hoppLang = (
return language ? new LanguageSupport(language, exts) : exts
}
/**
* Map of language MIME types to their corresponding language definitions
* where the import name matches the langMime string exactly.
* These are used with `StreamLanguage.define(...)` to register the language.
*/
const streamLanguageMap: Record<string, any> = {
rust,
clojure,
csharp,
go,
http,
java,
powershell: powerShell,
python,
shell,
html,
r,
ruby,
swift,
}
/**
* Returns the appropriate CodeMirror language object based on the provided MIME type.
*
* Handles specific content types like JSON, JavaScript, GraphQL, XML, etc.
* For simpler languages that directly match the import name, uses a lookup map
* to reduce repetition and automatically defines the StreamLanguage.
*
* @param langMime - The MIME type or shorthand language identifier (e.g., "javascript", "go", "python")
* @returns The corresponding CodeMirror Language object
*/
const getLanguage = (langMime: string): Language | null => {
// Special case for JSON types
if (isJSONContentType(langMime)) {
return jsoncLanguage
} else if (langMime === "application/javascript") {
} else if (
langMime === "application/javascript" ||
langMime === "javascript"
) {
return javascriptLanguage
} else if (langMime === "graphql") {
return GQLLanguage
@ -174,7 +219,13 @@ const getLanguage = (langMime: string): Language | null => {
return StreamLanguage.define(yaml)
}
// None matched, so return null
// Handle cases where langMime directly matches the import name
const streamLang = streamLanguageMap[langMime]
if (streamLang) {
return StreamLanguage.define(streamLang)
}
// If no match is found, return null
return null
}

View file

@ -193,6 +193,11 @@ export const CodegenDefinitions = [
*/
export type CodegenName = (typeof CodegenDefinitions)[number]["name"]
/**
* A type which defines all the valid code generator languages
*/
export type CodegenLang = (typeof CodegenDefinitions)[number]["lang"]
/**
* Generates Source Code for the given codgen
* @param codegen The codegen to apply