diff --git a/CHANGELOG.md b/CHANGELOG.md index aac2374f..bc3b919f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - Added default field value for content type fields - HMR support for panel webview development - [#198](https://github.com/estruyf/vscode-front-matter/issues/198): Additional media sort options (alt, caption, and size). +- [#230](https://github.com/estruyf/vscode-front-matter/issues/230): JSON front matter support added. ## [5.10.0] - 2022-01-10 diff --git a/package.json b/package.json index 9340119f..95a9f198 100644 --- a/package.json +++ b/package.json @@ -830,12 +830,14 @@ "default": "YAML", "enum": [ "YAML", - "TOML" + "TOML", + "JSON" ], "markdownDescription": "Specify the type of Front Matter to use. [Check in the docs](https://frontmatter.codes/docs/settings#frontmatter.taxonomy.frontmattertype)", "enumDescriptions": [ "Specifies you want to use YAML markup for the front matter (default)", - "Specifies you want to use TOML markup for the front matter" + "Specifies you want to use TOML markup for the front matter", + "Specifies you want to use JSON markup for the front matter" ], "scope": "Taxonomy" }, diff --git a/src/helpers/ArticleHelper.ts b/src/helpers/ArticleHelper.ts index 1283dd7c..ca7ed4a1 100644 --- a/src/helpers/ArticleHelper.ts +++ b/src/helpers/ArticleHelper.ts @@ -6,7 +6,7 @@ import * as fs from "fs"; import { DefaultFields, SETTINGS_CONTENT_DEFAULT_FILETYPE, SETTINGS_CONTENT_PLACEHOLDERS, SETTING_COMMA_SEPARATED_FIELDS, SETTING_DATE_FIELD, SETTING_DATE_FORMAT, SETTING_INDENT_ARRAY, SETTING_REMOVE_QUOTES, SETTING_TAXONOMY_CONTENT_TYPES, SETTING_TEMPLATES_PREFIX } from '../constants'; import { DumpOptions } from 'js-yaml'; import { TomlEngine, getFmLanguage, getFormatOpts } from './TomlEngine'; -import { Extension, Settings } from '.'; +import { Extension, Logger, Settings } from '.'; import { format, parse } from 'date-fns'; import { Notifications } from './Notifications'; import { Article } from '../commands'; @@ -388,6 +388,8 @@ export class ArticleHelper { await EditorHelper.showFile(fileName) } }]; + + Logger.error(error.message); const editor = window.activeTextEditor; if (editor?.document.uri) { @@ -401,7 +403,6 @@ export class ArticleHelper { fmRange = MarkdownFoldingProvider.getFrontMatterRange(editor.document); } - if (fmRange) { Extension.getInstance().diagnosticCollection.set(editor.document.uri, [{ severity: DiagnosticSeverity.Error, diff --git a/src/helpers/TomlEngine.ts b/src/helpers/TomlEngine.ts index 99839e6d..be0f4d97 100644 --- a/src/helpers/TomlEngine.ts +++ b/src/helpers/TomlEngine.ts @@ -11,7 +11,7 @@ export const getFormatOpts = (format: string): { language: string, delimiters: s const formats: { [prop: string]: { language: string, delimiters: string | [string, string] | undefined }} = { yaml: { language: 'yaml', delimiters: '---' }, toml: { language: 'toml', delimiters: '+++' }, - json: { language: 'json', delimiters: ['{', '}'] }, + json: { language: 'json', delimiters: '---' }, }; return formats[format]; diff --git a/src/providers/MarkdownFoldingProvider.ts b/src/providers/MarkdownFoldingProvider.ts index f3e5e6e2..4d00e04f 100644 --- a/src/providers/MarkdownFoldingProvider.ts +++ b/src/providers/MarkdownFoldingProvider.ts @@ -1,6 +1,6 @@ import { TextEditorDecorationType } from 'vscode'; import { CancellationToken, FoldingContext, FoldingRange, FoldingRangeKind, FoldingRangeProvider, Range, TextDocument, window, Position } from 'vscode'; -import { SETTINGS_CONTENT_FRONTMATTER_HIGHLIGHT } from '../constants'; +import { SETTINGS_CONTENT_FRONTMATTER_HIGHLIGHT, SETTING_FRONTMATTER_TYPE } from '../constants'; import { Settings } from '../helpers'; import { FrontMatterDecorationProvider } from './FrontMatterDecorationProvider'; @@ -50,6 +50,15 @@ export class MarkdownFoldingProvider implements FoldingRangeProvider { * @returns */ public static getFrontMatterRange(document?: TextDocument) { + const language = Settings.get(SETTING_FRONTMATTER_TYPE) as string || "YAML"; + + let lineStart = "---"; + let lineEnd = "---"; + if (language === "TOML") { + lineStart = "+++"; + lineEnd = lineStart; + } + if (document) { const lines = document.getText().split('\n'); @@ -59,7 +68,7 @@ export class MarkdownFoldingProvider implements FoldingRangeProvider { for (let i = 0; i < lines.length; i++) { const line = lines[i]; - if (line.startsWith('---')) { + if (line.startsWith(lineStart) || line.startsWith(lineEnd)) { if (i === 0 && start === null) { start = i; } else if (start !== null && end === null) {