#243 - Refactoring front matter parsing

This commit is contained in:
Elio Struyf
2022-02-08 13:17:56 +01:00
parent df86d02e8b
commit 781ab6ac40
12 changed files with 106 additions and 80 deletions
+7 -18
View File
@@ -1,11 +1,10 @@
import { MarkdownFoldingProvider } from './../providers/MarkdownFoldingProvider';
import { DEFAULT_CONTENT_TYPE, DEFAULT_CONTENT_TYPE_NAME } from './../constants/ContentType';
import * as vscode from 'vscode';
import * as matter from "gray-matter";
import * as fs from "fs";
import { DefaultFields, SETTINGS_CONTENT_DEFAULT_FILETYPE, SETTINGS_CONTENT_PLACEHOLDERS, SETTINGS_CONTENT_SUPPORTED_FILETYPES, 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 { FrontMatterParser, ParsedFrontMatter } from '../parsers';
import { Extension, Logger, Settings, SlugHelper } from '.';
import { format, parse } from 'date-fns';
import { Notifications } from './Notifications';
@@ -56,7 +55,7 @@ export class ArticleHelper {
* @param editor
* @param article
*/
public static async update(editor: vscode.TextEditor, article: matter.GrayMatterFile<string>) {
public static async update(editor: vscode.TextEditor, article: ParsedFrontMatter) {
const update = this.generateUpdate(editor.document, article);
await editor.edit(builder => builder.replace(update.range, update.newText));
@@ -66,7 +65,7 @@ export class ArticleHelper {
* Generate the update to be applied to the article.
* @param article
*/
public static generateUpdate(document: vscode.TextDocument, article: matter.GrayMatterFile<string>): vscode.TextEdit {
public static generateUpdate(document: vscode.TextDocument, article: ParsedFrontMatter): vscode.TextEdit {
const nrOfLines = document.lineCount as number;
const range = new vscode.Range(new vscode.Position(0, 0), new vscode.Position(nrOfLines, 0));
const removeQuotes = Settings.get(SETTING_REMOVE_QUOTES) as string[];
@@ -117,9 +116,6 @@ export class ArticleHelper {
const indentArray = Settings.get(SETTING_INDENT_ARRAY) as boolean;
const commaSeparated = Settings.get<string[]>(SETTING_COMMA_SEPARATED_FIELDS);
const language = getFmLanguage();
const langOpts = getFormatOpts(language);
const spaces = vscode.window.activeTextEditor?.options?.tabSize;
if (commaSeparated) {
@@ -130,9 +126,7 @@ export class ArticleHelper {
}
}
return matter.stringify(content, data, ({
...TomlEngine,
...langOpts,
return FrontMatterParser.toFile(content, data, ({
noArrayIndent: !indentArray,
skipInvalid: true,
noCompatMode: true,
@@ -169,7 +163,7 @@ export class ArticleHelper {
/**
* Get date from front matter
*/
public static getDate(article: matter.GrayMatterFile<string> | null) {
public static getDate(article: ParsedFrontMatter | null) {
if (!article) {
return;
}
@@ -358,17 +352,12 @@ export class ArticleHelper {
* @param fileContents
* @returns
*/
private static parseFile(fileContents: string, fileName: string): matter.GrayMatterFile<string> | null {
private static parseFile(fileContents: string, fileName: string): ParsedFrontMatter | null {
try {
const commaSeparated = Settings.get<string[]>(SETTING_COMMA_SEPARATED_FIELDS);
if (fileContents) {
const language: string = getFmLanguage();
const langOpts = getFormatOpts(language);
let article: matter.GrayMatterFile<string> | null = matter(fileContents, {
...TomlEngine,
...langOpts
});
let article = FrontMatterParser.fromFile(fileContents);
if (article?.data) {
if (commaSeparated) {