/
parser.go
69 lines (57 loc) · 1.62 KB
/
parser.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package pictarinesnip
import (
"encoding/json"
"github.com/lemoony/snipkit/internal/model"
"github.com/lemoony/snipkit/internal/utils/stringutil"
"github.com/lemoony/snipkit/internal/utils/system"
"github.com/lemoony/snipkit/internal/utils/tagutil"
)
var languageMapping = map[string]model.Language{
"shell": model.LanguageBash,
"yaml": model.LanguageYAML,
"markdown": model.LanguageMarkdown,
}
type picatrineSnippet struct {
ID string `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
Snippet string `json:"snippet"`
Mode struct {
Name string `json:"name"`
} `json:"mode"`
}
func parseLibrary(path string, system *system.System, tags *stringutil.StringSet) []model.Snippet {
file, err := system.Fs.Open(path)
if err != nil {
panic(err)
}
var snippets []picatrineSnippet
if err := json.NewDecoder(file).Decode(&snippets); err != nil {
panic(err)
}
return mapToModel(snippets, tags)
}
func mapToModel(rawSnippets []picatrineSnippet, tags *stringutil.StringSet) []model.Snippet {
var result []model.Snippet
for i := range rawSnippets {
raw := rawSnippets[i]
if !tagutil.HasValidTag(*tags, raw.Tags) {
continue
}
result = append(result, snippetImpl{
id: raw.ID,
title: raw.Name,
tags: raw.Tags,
language: mapToLanguage(raw.Mode.Name),
content: raw.Snippet,
})
}
return result
}
// https://github.com/Pictarine/macos-snippets/blob/aeb70a4b0e04025be9b511ea5810dd41671d89e7/Snip/Model/Mode.swift
func mapToLanguage(name string) model.Language {
if entry, ok := languageMapping[name]; ok {
return entry
}
return model.LanguageUnknown
}