• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->

Tip - VS Code Fix for INI Files (1 Viewer)

Coldblooded

Purveyor of all things MQ and Lua
Creator
Joined
Mar 23, 2019
RedCents
9,362¢
Pronouns
He/Him
If you're a VS Code user, you know that its one of the best editors out there. Unfortunately, if you are working with INI files, the syntax highlighting can get a bit wonky because of single quotes in names of spells and items.


So, something like:
INI:
item="Journeyman's Boots"
Breaks the highlighting for everything after the single '

A bit of research and some fiddling this morning before work - and I present to you the fix.

Update your ini.tmLanguage.json file as shown below (either cut and paste the whole thing, or just change the two lines marked). This file is normally under AppData\Local\Programs\Microsoft VS Code\resources\app\extensions\ini\syntaxes

ini.tmLanguage.json:
{
    "information_for_contributors": [
        "This file has been converted from https://github.com/textmate/ini.tmbundle/blob/master/Syntaxes/Ini.plist",
        "If you want to provide a fix or improvement, please create a pull request against the original repository.",
        "Once accepted there, we are happy to receive an update request."
    ],
    "version": "https://github.com/textmate/ini.tmbundle/commit/2af0cbb0704940f967152616f2f1ff0aae6287a6",
    "name": "Ini",
    "scopeName": "source.ini",
    "patterns": [
        {
            "begin": "(^[ \\t]+)?(?=#)",
            "beginCaptures": {
                "1": {
                    "name": "punctuation.whitespace.comment.leading.ini"
                }
            },
            "end": "(?!\\G)",
            "patterns": [
                {
                    "begin": "#",
                    "beginCaptures": {
                        "0": {
                            "name": "punctuation.definition.comment.ini"
                        }
                    },
                    "end": "\\n",
                    "name": "comment.line.number-sign.ini"
                }
            ]
        },
        {
            "begin": "(^[ \\t]+)?(?=;)",
            "beginCaptures": {
                "1": {
                    "name": "punctuation.whitespace.comment.leading.ini"
                }
            },
            "end": "(?!\\G)",
            "patterns": [
                {
                    "begin": ";",
                    "beginCaptures": {
                        "0": {
                            "name": "punctuation.definition.comment.ini"
                        }
                    },
                    "end": "\\n",
                    "name": "comment.line.semicolon.ini"
                }
            ]
        },
        {
            "captures": {
                "1": {
                    "name": "keyword.other.definition.ini"
                },
                "2": {
                    "name": "punctuation.separator.key-value.ini"
                }
            },
            "match": "\\b([a-zA-Z0-9_.-]+)\\b\\s*(=)"
        },
        {
            "captures": {
                "1": {
                    "name": "punctuation.definition.entity.ini"
                },
                "3": {
                    "name": "punctuation.definition.entity.ini"
                }
            },
            "match": "^(\\[)(.*?)(\\])",
            "name": "entity.name.section.group-title.ini"
        },
        {
            "begin": "\\s*\\K'",
            "beginCaptures": {
                "0": {
                    "name": "punctuation.definition.string.begin.ini"
                }
            },
            "end": "'",
            "endCaptures": {
                "0": {
                    "name": "punctuation.definition.string.end.ini"
                }
            },
            "name": "string.quoted.single.ini",
            "patterns": [
                {
                    "match": "\\\\.",
                    "name": "constant.character.escape.ini"
                }
            ]
        },
        {
            "begin": "\\s*\\K\"",
            "beginCaptures": {
                "0": {
                    "name": "punctuation.definition.string.begin.ini"
                }
            },
            "end": "\"",
            "endCaptures": {
                "0": {
                    "name": "punctuation.definition.string.end.ini"
                }
            },
            "name": "string.quoted.double.ini"
        }
    ]
}
 
AlienQ,

This fixes the need for double quotes around single quotes in the highlighting. However, the semicolon in the middle of a value is still considered a comment by most INI parsers. I've not really looked at the MQ ini parser, but if we want that can be removed from the Code highlighting. Hopefully Knightly or someone who works on it can comment.

Enjoy!

ini.tmLanguage.json:
{
    "fileTypes": ["ini", "conf"],
    "keyEquivalent": "^~I",
    "name": "Ini",
    "patterns": [
    {
        "begin": "(^[ \\t]+)?(?=#)",
        "beginCaptures":
        {
            "1":
            {
                "name": "punctuation.whitespace.comment.leading.ini"
            }
        },
        "end": "(?!\\G)",
        "patterns": [
        {
            "begin": "#",
            "beginCaptures":
            {
                "0":
                {
                    "name": "punctuation.definition.comment.ini"
                }
            },
            "end": "\\n",
            "name": "comment.line.number-sign.ini"
        }]
    },
    {
        "begin": "(^[ \\t]+)?(?=;)",
        "beginCaptures":
        {
            "1":
            {
                "name": "punctuation.whitespace.comment.leading.ini"
            }
        },
        "end": "(?!\\G)",
        "patterns": [
        {
            "begin": ";",
            "beginCaptures":
            {
                "0":
                {
                    "name": "punctuation.definition.comment.ini"
                }
            },
            "end": "\\n",
            "name": "comment.line.semicolon.ini"
        }]
    },
    {
        "captures":
        {
            "1":
            {
                "name": "keyword.other.definition.ini"
            },
            "2":
            {
                "name": "punctuation.separator.key-value.ini"
            }
        },
        "match": "\\b([a-zA-Z0-9_.-]+)\\b\\s*(=)"
    },
    {
        "captures":
        {
            "1":
            {
                "name": "punctuation.definition.entity.ini"
            },
            "3":
            {
                "name": "punctuation.definition.entity.ini"
            }
        },
        "match": "^(\\[)(.*?)(\\])",
        "name": "entity.name.section.group-title.ini"
    },
    {
        "begin": "=\\s*\\K\\s*'",
        "beginCaptures":
        {
            "0":
            {
                "name": "punctuation.definition.string.begin.ini"
            }
        },
        "end": "(?<!\\\\)(?:\\\\\\\\)*\\K'",
        "endCaptures":
        {
            "0":
            {
                "name": "punctuation.definition.string.end.ini"
            }
        },
        "name": "string.quoted.single.ini",
        "patterns": [
        {
            "include": "#escape"
        }]
    },
    {
        "begin": "=\\s*\\K\"",
        "beginCaptures":
        {
            "0":
            {
                "name": "punctuation.definition.string.begin.ini"
            }
        },
        "end": "(?<!\\\\)(?:\\\\\\\\)*\\K\"",
        "endCaptures":
        {
            "0":
            {
                "name": "punctuation.definition.string.end.ini"
            }
        },
        "name": "string.quoted.double.ini",
        "patterns": [
        {
            "include": "#escape"
        }]
    },
    {
        "begin": "=\\s*\\K`",
        "beginCaptures":
        {
            "0":
            {
                "name": "punctuation.definition.string.begin.ini"
            }
        },
        "end": "(?<!\\\\)(?:\\\\\\\\)*\\K`",
        "endCaptures":
        {
            "0":
            {
                "name": "punctuation.definition.string.end.ini"
            }
        },
        "name": "string.interpolated.ini",
        "patterns": [
        {
            "include": "#escape"
        }]
    },
    {
        "begin": "=\\s*(?!$)\\K",
        "contentName": "string.unquoted.ini",
        "end": "\\s*(?=[\\n;#])",
        "patterns": [
        {
            "include": "#escape"
        },
        {
            "match": "\\b[0-9]+\\b",
            "name": "constant.numeric.ini"
        }]
    }],
    "repository":
    {
        "escape":
        {
            "match": "\\\\.",
            "name": "constant.character.escape.ini"
        }
    },
    "scopeName": "source.ini",
    "uuid": "77DC23B6-8A90-11D9-BAA4-000A9584EC8C"
}
 
you can change the colors of some names of the things in for example using this code, must go in the settings.json


JSON:
    "editor.tokenColorCustomizations": {
        "textMateRules": [
            {
                "scope": [
                "punctuation.separator.key-value.ini",
                ],
                "settings": {
                "foreground": "#9e70cc",
                }
            },
        ]
    }
 
AlienQ,

This fixes the need for double quotes around single quotes in the highlighting. However, the semicolon in the middle of a value is still considered a comment by most INI parsers. I've not really looked at the MQ ini parser, but if we want that can be removed from the Code highlighting. Hopefully Knightly or someone who works on it can comment.

Enjoy!

This still works great except on my recently installed copy of VSCode I couldn't find the file anywhere in AppData.

I finally found it C:\Program Files\Microsoft VS Code\resources\app\extensions\ini\syntaxes\ini.tmLanguage.json

PS. I'm making another attempt to switch over to VSCode as my default editor (from Notepad++) and Code can seem damn overwhelming. This thread was magic in fixing an annoying visual issue!
 
This still works great except on my recently installed copy of VSCode I couldn't find the file anywhere in AppData.

I finally found it C:\Program Files\Microsoft VS Code\resources\app\extensions\ini\syntaxes\ini.tmLanguage.json

PS. I'm making another attempt to switch over to VSCode as my default editor (from Notepad++) and Code can seem damn overwhelming. This thread was magic in fixing an annoying visual issue!
Thanks for the update on the file location. Not sure what would make the difference, but more info is good!
 
Tip - VS Code Fix for INI Files

Users who are viewing this thread

Back
Top