-
Notifications
You must be signed in to change notification settings - Fork 0
/
clean_electronics_files.nim
86 lines (72 loc) · 2.91 KB
/
clean_electronics_files.nim
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# This file is part of osh-tool.
# <https://github.com/hoijui/osh-tool>
#
# SPDX-FileCopyrightText: 2021-2023 Robin Vobruba <[email protected]>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
import os
import std/tables
import system
import ../check
import ../check_config
import ../state
import ../util/fs
import ../file_ext_meta
#const IDS = @[srcFileNameBase(), "cef", "celef", "clean_electronics_files"]
const ID = srcFileNameBase()
const EXT_FILE = "resources/osh-file-types/res/data/pcb.csv"
const FROM_THIS_FILE_TO_PROJ_ROOT = "../.."
const EXT_FILE_REL = FROM_THIS_FILE_TO_PROJ_ROOT & "/" & EXT_FILE
const EXT_FILE_ABS = staticExec("pwd") & "/" & EXT_FILE_REL
static:
if not fileExists(EXT_FILE_ABS):
echo "\nError: Required file does not exist: " & EXT_FILE &
"\n\tMaybe you forgot to checkout git submodules? (`git submodule update --init --recursive`)\n"
parseInjectExtsAndMap(staticRead(EXT_FILE_ABS))
type CleanElectronicsFilesCheck = ref object of Check
type CleanElectronicsFilesCheckGenerator = ref object of CheckGenerator
method name*(this: CleanElectronicsFilesCheck): string =
return "Clean electronics files"
method description*(this: CleanElectronicsFilesCheck): string =
return """Checks that the contained Electronics blueprint files - \
Schematics and PCB designs - \
if any, \
use an open format, \
are text-based \
and are actual source files (vs generated)."""
method why*(this: CleanElectronicsFilesCheck): string =
return """- open format:
This is good for collaboration:
It is legal and technically easier to create viewers and editors,
and it is much more likley that there already are or will be viewers and editors
for such formats,
which are free themselfs.
- text-based:
This is good for versioning with a [version control system](https://en.wikipedia.org/wiki/Version_control),
e.g. git,
which makes collaborating and sharing of a design easier.
- source files:
This is required for being Open **Source** in the first place."""
method sourcePath*(this: CleanElectronicsFilesCheck): string =
return fs.srcFileName()
method requirements*(this: CleanElectronicsFilesCheck): CheckReqs =
return {
CheckReq.FilesListRecNonGen,
}
method getSignificanceFactors*(this: CleanElectronicsFilesCheck): CheckSignificance =
return CheckSignificance(
weight: 1.0,
openness: 1.0,
hardware: 1.0,
quality: 0.5,
machineReadability: 1.0,
)
method run*(this: CleanElectronicsFilesCheck, state: var State): CheckResult =
extCheckRun(state, ID, state.config.electronics, FILE_EXTENSIONS, FILE_EXTENSIONS_MAX_PARTS, FILE_EXTENSIONS_MAP)
method id*(this: CleanElectronicsFilesCheckGenerator): string =
return ID
method generate*(this: CleanElectronicsFilesCheckGenerator, config: CheckConfig = this.defaultConfig()): Check =
this.ensureNonConfig(config)
CleanElectronicsFilesCheck()
proc createGenerator*(): CheckGenerator =
CleanElectronicsFilesCheckGenerator()