Skip to content

Commit 3e8a667

Browse files
fix: better typing and show better lang names
1 parent 3635a13 commit 3e8a667

File tree

5 files changed

+37
-33
lines changed

5 files changed

+37
-33
lines changed

website/_data/catalog.data.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { createContentLoader } from 'vitepress'
2+
import { ExampleLangs } from '../src/catalog/data'
23

34
interface Rule {
45
id: string
56
name: string
67
type: string
78
link: string
89
playgroundLink: string
9-
language: string
10+
language: ExampleLangs
1011
hasFix: boolean
1112
rules: string[]
1213
features: string[]
@@ -29,7 +30,7 @@ export default createContentLoader('catalog/**/*.md', {
2930
? 'YAML' : 'Pattern'
3031
const playgroundLink = /\[Playground Link\]\((.+)\)/.exec(source)?.[1] || ''
3132
const hasFix = source.includes('<Badge') && source.includes('Has Fix')
32-
const language = url.split('/')[2]
33+
const language = url.split('/')[2] as ExampleLangs
3334
const name = source.match(/##\s*([^<\n]+)/)?.[1] || ''
3435

3536
return {

website/src/catalog/RuleFilter.vue

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import {
1010
1111
const model = defineModel<Filter>()
1212
13-
const filter = ref({
14-
selectedLanguages: [] as string[],
15-
selectedRuleFilters: [] as string[],
16-
selectedFeatures: [] as string[],
17-
selectedTypes: [] as string[],
13+
const filter = ref<Filter>({
14+
selectedLanguages: [],
15+
selectedRuleFilters: [],
16+
selectedFeatures: [],
17+
selectedTypes: [],
1818
})
1919
2020
watchEffect(() => {
@@ -27,9 +27,9 @@ watchEffect(() => {
2727
<details open>
2828
<summary>Language Filters</summary>
2929
<div class="checkbox-group">
30-
<label v-for="lang in languages" :key="lang">
30+
<label v-for="displayName, lang in languages" :key="lang">
3131
<input type="checkbox" v-model="filter.selectedLanguages" :value="lang">
32-
<code class="option">{{ lang }}</code>
32+
<code class="option">{{ displayName }}</code>
3333
</label>
3434
</div>
3535
</details>

website/src/catalog/RuleList.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script setup lang="ts">
2-
import { type Filter, getRules } from './data'
2+
import { type Filter, getRules, languages } from './data'
33
import { computed, type PropType } from 'vue'
44
55
const props = defineProps({
@@ -23,7 +23,7 @@ const rules = computed(() => getRules(props.filter))
2323
<div class="rule-badges">
2424
<span class="badge type">{{ rule.type }}</span>
2525
<a :href="`/catalog/${rule.language}/`" class="badge language">
26-
{{ rule.language }}
26+
{{ languages[rule.language] }}
2727
</a>
2828
</div>
2929
</div>

website/src/catalog/data.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,32 @@ export function getRules(filter: Filter) {
55
selectedLanguages,
66
} = filter
77
return allRules.filter(rule => {
8-
return !selectedLanguages.length || selectedLanguages.map(s => s.toLowerCase()).includes(rule.language)
8+
return !selectedLanguages.length || selectedLanguages.includes(rule.language)
99
})
1010
}
1111

1212
export type Filter = {
13-
selectedLanguages: string[],
13+
selectedLanguages: ExampleLangs[],
1414
selectedRuleFilters: string[],
1515
selectedFeatures: string[],
1616
selectedTypes: string[],
1717
}
1818

19-
export const languages = [
20-
'C',
21-
'Cpp',
22-
'Go',
23-
'HTML',
24-
'Java',
25-
'Kotlin',
26-
'Python',
27-
'Ruby',
28-
'Rust',
29-
'TSX',
30-
'TypeScript',
31-
'YAML',
32-
]
19+
export type ExampleLangs = keyof typeof languages
20+
export const languages = {
21+
c: 'C',
22+
cpp: 'C++',
23+
go: 'Go',
24+
html: 'HTML',
25+
java: 'Java',
26+
kotlin: 'Kotlin',
27+
python: 'Python',
28+
ruby: 'Ruby',
29+
rust: 'Rust',
30+
tsx: 'TSX',
31+
typescript: 'TypeScript',
32+
yaml: 'YAML',
33+
}
3334

3435
export const ruleTypes = [
3536
'Pattern',

website/src/catalog/index.vue

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
<script setup lang="ts">
22
import { ref } from 'vue'
3-
const filter = ref({
4-
selectedLanguages: [] as string[],
5-
selectedRuleFilters: [] as string[],
6-
selectedFeatures: [] as string[],
7-
selectedTypes: [] as string[],
8-
})
93
import RuleFilter from './RuleFilter.vue'
104
import RuleList from './RuleList.vue'
5+
import type { Filter } from './data';
6+
7+
const filter = ref<Filter>({
8+
selectedLanguages: [],
9+
selectedRuleFilters: [],
10+
selectedFeatures: [],
11+
selectedTypes: [],
12+
})
1113
</script>
1214

1315
<template>

0 commit comments

Comments
 (0)