Skip to content

Function Size ​

Checks if functions inside script setup block are less than 20 lines of code. It handles regular and arrow functions.

❓ Why it's good to follow this rule? ​

  • Simple Responsibility: A function that is too long is likely doing too many things. It is better to split your function into smaller functions/composables.
  • Readability: Smaller functions are easier to read and understand.
  • Maintainability: Smaller functions are easier to maintain and refactor.
  • Testability: Smaller functions are easier to test.

😱 Examples of code for which this rule will throw a warning ​

WARNING

The following code contains functions that exceed the recommended size limit. Large functions can be difficult to read, understand, and maintain.

javascript
function dummyRegularFunction() {
  const firstName = 'john'
  const lastName = 'doe'
  const age = 30

  if (age < 18) {
    console.log('Too young for this function!')
  }
  else {
    console.log('Hello ', firstName)
  }

  const hobbies = ['reading', 'gaming', 'cooking']
  for (const hobby of hobbies) {
    console.log('I enjoy ', hobby)
  }

  const getRandomNumber = () => Math.floor(Math.random() * 100)
  const randomNum = getRandomNumber()
  console.log('Random number: ', randomNum)

  return 'Function execution complete!'
}

Another example with an arrow function:

javascript
const getOpenBookings = page =>
  axios
    .get(`${import.meta.env.VITE_APP_API_URL}bookings/listOpen.json?page=${page}`, store.tokenHeader)
    .then((res) => {
      bookings.value = res.data.bookings
      paginate.value = res.data.paginate

      const hobbies = ['reading', 'gaming', 'cooking']
      for (const hobby of hobbies) {
        console.log('I enjoy ', hobby)
      }

      bookings.value = res.data.bookings
      paginate.value = res.data.paginate
      bookings.value = res.data.bookings
      paginate.value = res.data.paginate
      bookings.value = res.data.bookings
      paginate.value = res.data.paginate
      // Additional repetitive lines...
    })
    .catch(err => console.error(err))

🤩 How to fix it? ​

TIP

Refactor the function to reduce its size by breaking it down into smaller, more focused functions. This improves readability, testability, and maintainability.

For the first example:

javascript
function logAgeMessage(age) {
  if (age < 18) {
    console.log('Too young for this function!')
  }
  else {
    console.log('Hello ', firstName)
  }
}

function listHobbies(hobbies) {
  for (const hobby of hobbies) {
    console.log('I enjoy ', hobby)
  }
}

function dummyRegularFunction() {
  const firstName = 'john'
  const lastName = 'doe'
  const age = 30

  logAgeMessage(age)
  listHobbies(['reading', 'gaming', 'cooking'])

  const randomNum = Math.floor(Math.random() * 100)
  console.log('Random number: ', randomNum)

  return 'Function execution complete!'
}

For the arrow function:

javascript
const handleResponse = (res) => {
  bookings.value = res.data.bookings
  paginate.value = res.data.paginate
  // Handle repetitive logic here or refactor further
}

const getOpenBookings = page =>
  axios
    .get(`${import.meta.env.VITE_APP_API_URL}bookings/listOpen.json?page=${page}`, store.tokenHeader)
    .then(handleResponse)
    .catch(err => console.error(err))

🛠 How to override? ​

The default max size for this rule is 20.

You can override through the new override option in .config/vue-mess-detector.json ⬇️

json
{
  // other flags
  "override": {
    "maxFunctionSize": 50
  }
}