Skip to content

Commit ffb5bbe

Browse files
committed
feat: support import test cases from OJ; fix test case removing
1 parent 625a561 commit ffb5bbe

58 files changed

Lines changed: 2583 additions & 89 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
src/components/ui/** linguist-vendored
2+
src/lib/** linguist-vendored

commitlint.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const types = ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test'];
22

3-
module.exports = {
3+
export default {
44
extends: ['@commitlint/config-conventional'],
55
rules: {
66
'type-enum': [2, 'always', [...types, 'release']],

components.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"$schema": "https://shadcn-vue.com/schema.json",
3+
"style": "new-york",
4+
"typescript": true,
5+
"tailwind": {
6+
"config": "",
7+
"css": "src/tailwind.css",
8+
"baseColor": "neutral",
9+
"cssVariables": true,
10+
"prefix": ""
11+
},
12+
"aliases": {
13+
"components": "@/components",
14+
"composables": "@/composables",
15+
"utils": "@/lib/utils",
16+
"ui": "@/components/ui",
17+
"lib": "@/lib"
18+
},
19+
"iconLibrary": "lucide"
20+
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import ts from '@typed-sigterm/eslint-config';
22

3-
export default ts({}, {
3+
export default ts({
44
rules: {
55
// use `consola` instead
66
'no-console': [2, { allow: undefined }],
@@ -9,4 +9,9 @@ export default ts({}, {
99
// for performance
1010
'vue/no-mutating-props': [0],
1111
},
12+
13+
ignores: [
14+
'./src/components/ui',
15+
'./src/lib',
16+
],
1217
});

extension/oj.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { Platform } from 'un-oj'
2+
import type { OJ } from '../shared/events'
3+
import AtCoder from 'un-oj/platforms/atcoder'
4+
import Codeforces from 'un-oj/platforms/codeforces'
5+
import Hydro from 'un-oj/platforms/hydro'
6+
import LeetCode from 'un-oj/platforms/leetcode'
7+
import Luogu from 'un-oj/platforms/luogu'
8+
import Lyrio from 'un-oj/platforms/lyrio'
9+
import MXOJ from 'un-oj/platforms/mxoj'
10+
11+
export const OJ_INSTANCE: Record<OJ, Platform<any>> = {
12+
AtCoder: new AtCoder(),
13+
Codeforces: new Codeforces(),
14+
Hydro: new Hydro(),
15+
LeetCode: new LeetCode(),
16+
Luogu: new Luogu(),
17+
LibreOJ: new Lyrio(),
18+
MXOJ: new MXOJ(),
19+
};

extension/webview.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { EventMarker } from '../shared/events';
55
import { getAutoSave, getConfiguredDefaultTask, getConfiguredTasks, getDefaultTask, isConfigured } from './config';
66
import { Runner } from './runner';
77
import { logger } from './utils';
8+
import { OJ_INSTANCE } from './oj';
89

910
class PanelProvider implements vscode.WebviewViewProvider, vscode.Disposable {
1011
static readonly VIEW_TYPE = 'oi-runner-2.panel';
@@ -171,6 +172,25 @@ class PanelProvider implements vscode.WebviewViewProvider, vscode.Disposable {
171172
});
172173
});
173174
break;
175+
176+
case 'file:open-url':
177+
vscode.env.openExternal(vscode.Uri.parse(message.url));
178+
break;
179+
180+
case 'oj:fetch-samples':
181+
try {
182+
const res = await OJ_INSTANCE[message.provider].getProblem(message.problem);
183+
this.postEvent({
184+
type: 'oj:samples-fetched',
185+
samples: res.samples,
186+
})
187+
} catch (e) {
188+
logger.error('Failed to fetch samples:', e);
189+
this.postEvent({ type: 'oj:samples-fetched' })
190+
const res = await vscode.window.showErrorMessage('Failed to fetch samples', 'Copy Details');
191+
if (res === 'Copy Details')
192+
vscode.env.clipboard.writeText(e instanceof Error && e.stack || String(e));
193+
}
174194
}
175195
}
176196
}

package.json

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
"displayName": "%extension.displayName%",
55
"version": "2.0.1",
66
"private": true,
7+
"type": "module",
78
"packageManager": "pnpm@10.9.0",
89
"description": "%extension.description%",
910
"license": "MIT",
1011
"repository": {
11-
"url": "https://github.com/typed-sigterm/oi-runner-2"
12+
"url": "git+https://github.com/typed-sigterm/oi-runner-2.git"
1213
},
1314
"categories": [
1415
"Debuggers",
@@ -18,7 +19,7 @@
1819
"icon": "assets/logo.png",
1920
"engines": {
2021
"node": "22",
21-
"vscode": "^1.94.0"
22+
"vscode": "^1.100.0"
2223
},
2324
"contributes": {
2425
"commands": [
@@ -235,35 +236,49 @@
235236
"@guolao/vue-monaco-editor": "^1.5.5",
236237
"@iconify-prerendered/vue-codicon": "^0.28.1748584083",
237238
"@iconify-prerendered/vue-line-md": "^0.28.1746598136",
239+
"@tailwindcss/vite": "^4.1.8",
238240
"@tomjs/vite-plugin-vscode": "^4.2.1",
241+
"@tsconfig/node20": "^20.1.5",
239242
"@typed-sigterm/eslint-config": "^1.4.1",
240243
"@types/js-md5": "^0.7.2",
241244
"@types/mixpanel-browser": "^2.60.0",
242245
"@types/node": "^22.15.29",
243246
"@types/ps-tree": "^1.1.6",
244-
"@types/vscode": "^1.94.0",
247+
"@types/vscode": "^1.100.0",
245248
"@types/vscode-webview": "^1.57.5",
246249
"@vitejs/plugin-vue": "^5.2.4",
247250
"@vscode-elements/elements": "^1.16.1",
248251
"@vscode/codicons": "^0.0.36",
249252
"@vscode/vsce": "^3.4.2",
253+
"@vue/tsconfig": "^0.7.0",
254+
"@vueuse/core": "^13.3.0",
255+
"class-variance-authority": "^0.7.1",
256+
"clsx": "^2.1.1",
250257
"consola": "^3.4.2",
251258
"eslint": "^9.28.0",
252259
"husky": "^9.1.7",
253260
"js-md5": "^0.8.3",
261+
"lucide-vue-next": "^0.511.0",
254262
"mixpanel-browser": "^2.65.0",
255263
"monaco-editor": "^0.52.2",
256264
"nanoid": "^5.1.5",
257265
"ps-tree": "^1.2.0",
266+
"reka-ui": "^2.3.0",
267+
"shadcn-vue": "^2.2.0",
268+
"tailwind-merge": "^3.3.0",
269+
"tailwindcss": "^4.1.8",
258270
"tree-kill": "^1.2.2",
271+
"tw-animate-css": "^1.3.3",
259272
"typescript": "^5.8.3",
273+
"un-oj": "^0.3.2",
260274
"vite": "npm:rolldown-vite@^6.3.15",
261275
"vue": "^3.5.16",
262276
"vue-tsc": "^2.2.10",
263277
"zod": "^3.25.46"
264278
},
265279
"pnpm": {
266280
"onlyBuiltDependencies": [
281+
"@tailwindcss/oxide",
267282
"@vscode/vsce-sign",
268283
"esbuild",
269284
"keytar",

0 commit comments

Comments
 (0)