Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: seperate the type aware rules for react #622

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
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
73 changes: 73 additions & 0 deletions fixtures/output/ts-strict-with-react/javascript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// This file is generated by ChatGPT

// eslint-disable-next-line no-console
const log = console.log

// Define a class using ES6 class syntax
class Person {
constructor(name, age) {
this.name = name
this.age = age
}

// Define a method within the class
sayHello() {
log(`Hello, my name is ${this.name} and I am ${this.age} years old.`)
}
}

// Create an array of objects
const people = [
new Person('Alice', 30),
new Person('Bob', 25),
new Person('Charlie', 35),
]

// Use the forEach method to iterate over the array
people.forEach((person) => {
person.sayHello()
})

// Use a template literal to create a multiline string
const multilineString = `
This is a multiline string
that spans multiple lines.
`

// Use destructuring assignment to extract values from an object
const { name, age } = people[0]
log(`First person in the array is ${name} and they are ${age} years old.`, multilineString)

// Use the spread operator to create a new array
const numbers = [1, 2, 3]
const newNumbers = [...numbers, 4, 5]
log(newNumbers)

// Use a try-catch block for error handling
try {
// Attempt to parse an invalid JSON string
JSON.parse('invalid JSON')
}
catch (error) {
console.error('Error parsing JSON:', error.message)
}

// Use a ternary conditional operator
const isEven = num => num % 2 === 0
const number = 7
log(`${number} is ${isEven(number) ? 'even' : 'odd'}.`)

// Use a callback function with setTimeout for asynchronous code
setTimeout(() => {
log('This code runs after a delay of 2 seconds.')
}, 2000)

let a, b, c, d, foo

if (a
|| b
|| c || d
|| (d && b)
) {
foo()
}
29 changes: 29 additions & 0 deletions fixtures/output/ts-strict-with-react/jsx.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
export function HelloWorld({
greeting = 'hello',
greeted = '"World"',
silent = false,
onMouseOver,
}) {
if (!greeting) {
return null
};

// TODO: Don't use random in render
const num = Math
.floor (Math.random() * 1e+7)
.toString()
.replace(/\.\d+/g, '')

return (
<div className="HelloWorld" title={`You are visitor number ${num}`} onMouseOver={onMouseOver}>
<strong>{ greeting.slice(0, 1).toUpperCase() + greeting.slice(1).toLowerCase() }</strong>
{greeting.endsWith(',')
? ' '
: <span style={{ color: '\grey' }}>", "</span> }
<em>
{ greeted }
</em>
{ (silent) ? '.' : '!'}
</div>
)
}
34 changes: 34 additions & 0 deletions fixtures/output/ts-strict-with-react/markdown.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Header
======

_Look,_ code blocks are formatted *too!*

```js
// This should be handled by ESLint instead of Prettier
function identity(x) {
if (foo) {
console.log('bar')
}
}
```

```css
/* This should be handled by Prettier */
.foo { color:red;}
```

Pilot|Airport|Hours
--|:--:|--:
John Doe|SKG|1338
Jane Roe|JFK|314

- - - - - - - - - - - - - - -

+ List
+ with a [link] (/to/somewhere)
+ and [another one]

[another one]: http://example.com 'Example title'

Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Curabitur consectetur maximus risus, sed maximus tellus tincidunt et.
23 changes: 23 additions & 0 deletions fixtures/output/ts-strict-with-react/toml.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
comma = [
1,
2,
3,
]

[foo]
b = 1
c = "hello"
a = { answer = 42 }
indent = [
1,
2
]

[a-table]
apple.type = "fruit"
apple.skin = "thin"
apple.color = "red"

orange.type = "fruit"
orange.skin = "thick"
orange.color = "orange"
32 changes: 32 additions & 0 deletions fixtures/output/ts-strict-with-react/tsx.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
export function Component1() {
return <div />
}

export function jsx2() {
const props = { a: 1, b: 2 }
return (
<a foo="bar" bar="foo">
<div
{...props}
a={1}
b="2"
>
Inline Text
</div>
<Component1>
Block Text
</Component1>
<div>
Mixed
<div>Foo</div>
Text
<b> Bar</b>
</div>
<p>
foo
<i>bar</i>
<b>baz</b>
</p>
</a>
)
}
84 changes: 84 additions & 0 deletions fixtures/output/ts-strict-with-react/typescript.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
// Define a TypeScript interface
interface Person {
name: string
age: number
}

// Create an array of objects with the defined interface
const people: Person[] = [
{ name: 'Alice', age: 30 },
{ name: 'Bob', age: 25 },
{ name: 'Charlie', age: 35 },
]

// eslint-disable-next-line no-console
const log = console.log

// Use a for...of loop to iterate over the array
for (const person of people) {
log(`Hello, my name is ${person.name} and I am ${person.age} years old.`)
}

// Define a generic function
function identity< T >(arg: T): T {
return arg
}

// Use the generic function with type inference
const result = identity(
'TypeScript is awesome',
)
log(result)

// Use optional properties in an interface
interface Car {
make: string
model?: string
}

// Create objects using the interface
const car1: Car = { make: 'Toyota' }
const car2: Car = {
make: 'Ford',
model: 'Focus',
}

// Use union types
type Fruit = 'apple' | 'banana' | 'orange'
const favoriteFruit: Fruit = 'apple'

// Use a type assertion to tell TypeScript about the type
const inputValue: any = '42'
const numericValue = inputValue as number

// Define a class with access modifiers
class Animal {
private name: string
constructor(name: string) {
this.name = name
}

protected makeSound(sound: string) {
log(`${this.name} says ${sound}`)
}
}

// Extend a class
class Dog extends Animal {
constructor(private alias: string) {
super(alias)
}

bark() {
this.makeSound('Woof!')
}
}

const dog = new Dog('Buddy')
dog.bark()

function fn(): string {
return `hello${1}`
}

log(car1, car2, favoriteFruit, numericValue, fn())
35 changes: 35 additions & 0 deletions fixtures/output/ts-strict-with-react/vue-ts.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<script setup lang="ts">
// Define reactive data and props
import { ref } from 'vue'

const greeting = ref('Hello, Vue 3!')
const counter = ref<number | 1>(0)

// Define a function
function incrementCounter() {
counter.value++
}
</script>

<template>
<div>
<h1>{{ greeting }}</h1>
<button @click="incrementCounter">
Click me!
</button>
<p>Counter: {{ counter }}</p>
</div>
</template>

<style>
.a { color: red }
</style>

<style lang="scss">
$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body { font: 100% $font-stack;
color: $primary-color;
}
</style>
27 changes: 27 additions & 0 deletions fixtures/output/ts-strict-with-react/vue.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<script setup>
// Define reactive data and props
import { ref } from 'vue'

const greeting = ref(`Hello, Vue 3!${1}`)
const counter = ref(0)
const doubled = computed(() => counter.value * 2)

// Define a function
function incrementCounter() {
counter.value++
}

const _zero = doubled.value + counter.value
</script>

<template>
<div>
<h1>
{{ greeting }}
</h1>
<button @click="incrementCounter">
Click me!
</button>
<p>Counter: {{ counter }}</p>
</div>
</template>
Loading