Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: linter

on:
push:
branches:
- develop
- main
pull_request:
branches:
- develop
- main

jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'

- name: Install Dependencies
run: |
composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
npm install

- name: Run Pint
run: vendor/bin/pint

- name: Frontend Format Check
run: npm run format

- name: Frontend Lint
run: npm run lint

- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: fix code style
commit_options: '--no-verify'

# We need to run PHPStan after commiting changes as it does not auto-fix errors.
- name: PHPStan
run: ./vendor/bin/phpstan
42 changes: 42 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Dependencies
node_modules/
vendor/

# Build outputs
public/
bootstrap/
dist/
.output/
.nuxt/

# Generated files
*.cache
.env
.env.*
!.env.example

# Config files
*.config.js
*.config.ts

# ShadCN Vue components (as per project rules)
resources/js/components/ui/

# IDE and Editor files
.idea/
.vscode/
*.sublime-project
*.sublime-workspace

# System files
.DS_Store
Thumbs.db

# Logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Test coverage
coverage/
4 changes: 3 additions & 1 deletion app/Http/Controllers/Auth/VerifyEmailController.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ public function __invoke(EmailVerificationRequest $request): RedirectResponse
}

if ($request->user()->markEmailAsVerified()) {
event(new Verified($request->user()));
/** @var \Illuminate\Contracts\Auth\MustVerifyEmail $user */
$user = $request->user();
event(new Verified($user));
}

return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,4 @@
},
"minimum-stability": "dev",
"prefer-stable": true
}
}
71 changes: 11 additions & 60 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -1,68 +1,19 @@
import js from '@eslint/js';
import prettier from 'eslint-config-prettier';
import globals from 'globals';
import typescript from 'typescript-eslint';
import vue from 'eslint-plugin-vue';

/** @type {import('eslint').Linter.Config[]} */
export default [
js.configs.recommended,
...typescript.configs.recommended,
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript';

export default defineConfigWithVueTs(
vue.configs['flat/essential'],
vueTsConfigs.recommended,
{
...vue.configs.flat.recommended,
...vue.configs["flat/strongly-recommended"],
...vue.configs["flat/essential"],
languageOptions: {
globals: {
...globals.browser,
},
},
rules: {
"vue/match-component-import-name": "warn",
"vue/match-component-file-name": [
"error",
{
extensions: ["vue"],
shouldMatchCase: true,
},
],
"vue/component-definition-name-casing": ["error", "PascalCase"],
"vue/block-tag-newline": [
"warn",
{
singleline: "always",
multiline: "always",
maxEmptyLines: 0,
},
],
"vue/html-self-closing": [
"error",
{
html: {
void: "always",
normal: "never",
component: "always",
},
svg: "always",
math: "always",
},
],
"vue/require-default-prop": "off",
},
ignores: ['vendor', 'node_modules', 'public', 'bootstrap/ssr', 'tailwind.config.js', 'resources/js/components/ui/*'],
},
{
plugins: {
"@typescript-eslint": tseslint.plugin,
},
languageOptions: {
parser: tseslint.parser,
parserOptions: {
project: true,
},
rules: {
'vue/multi-word-component-names': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
},
{
ignores: ['vendor', 'node_modules', 'public', 'bootstrap/ssr', 'tailwind.config.js'],
},
prettier, // Turn off all rules that might conflict with Prettier
];
prettier,
);
46 changes: 30 additions & 16 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
},
"dependencies": {
"@types/ziggy-js": "^1.3.3",
"@vue/eslint-config-typescript": "^14.3.0",
"@vueuse/core": "^12.0.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
Expand Down
10 changes: 10 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
includes:
- vendor/larastan/larastan/extension.neon

parameters:

paths:
- app/

# Level 9 is the highest level
level: 5
2 changes: 1 addition & 1 deletion resources/css/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,4 @@
body {
@apply bg-background text-foreground;
}
}
}
2 changes: 1 addition & 1 deletion resources/js/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import '../css/app.css';

import { createInertiaApp } from '@inertiajs/vue3';
import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
import { createApp, h } from 'vue';
import type { DefineComponent } from 'vue';
import { createApp, h } from 'vue';
import { ZiggyVue } from '../../vendor/tightenco/ziggy';
import { initializeTheme } from './composables/useAppearance';

Expand Down
Loading