File tree Expand file tree Collapse file tree 5 files changed +37
-33
lines changed
Expand file tree Collapse file tree 5 files changed +37
-33
lines changed Original file line number Diff line number Diff line change 11import { createContentLoader } from 'vitepress'
2+ import { ExampleLangs } from '../src/catalog/data'
23
34interface 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 = / \[ P l a y g r o u n d L i n k \] \( ( .+ ) \) / . 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 {
Original file line number Diff line number Diff line change @@ -10,11 +10,11 @@ import {
1010
1111const 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
2020watchEffect (() => {
@@ -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 >
Original file line number Diff line number Diff line change 11<script setup lang="ts">
2- import { type Filter , getRules } from ' ./data'
2+ import { type Filter , getRules , languages } from ' ./data'
33import { computed , type PropType } from ' vue'
44
55const 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 >
Original file line number Diff line number Diff 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
1212export 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
3435export const ruleTypes = [
3536 'Pattern' ,
Original file line number Diff line number Diff line change 11<script setup lang="ts">
22import { ref } from ' vue'
3- const filter = ref ({
4- selectedLanguages: [] as string [],
5- selectedRuleFilters: [] as string [],
6- selectedFeatures: [] as string [],
7- selectedTypes: [] as string [],
8- })
93import RuleFilter from ' ./RuleFilter.vue'
104import 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 >
You can’t perform that action at this time.
0 commit comments