#!/usr/bin/env fish

set -x ASDF_DIR (dirname (status -f))
set -l asdf_data_dir (
  if test -n "$ASDF_DATA_DIR"; echo $ASDF_DATA_DIR;
  else; echo $HOME/.asdf; end)

# Add asdf to PATH
set -l asdf_bin_dirs $ASDF_DIR/bin $ASDF_DIR/shims $asdf_data_dir/shims

for x in $asdf_bin_dirs
  if begin not contains $x $fish_user_paths; and test -d $x; end
    set -gx fish_user_paths $fish_user_paths $x
  end
end

#!/usr/bin/env fish

set -x ASDF_DIR (dirname (status -f))
set -l asdf_data_dir (
  if test -n "$ASDF_DATA_DIR"; echo $ASDF_DATA_DIR;
  else; echo $HOME/.asdf; end)

# Add asdf to PATH
set -l asdf_bin_dirs $ASDF_DIR/bin $ASDF_DIR/shims $asdf_data_dir/shims

for x in $asdf_bin_dirs
  if begin not contains $x $PATH; and test -d $x; end
    if set -q fish_user_paths
      set -gx fish_user_paths $fish_user_paths $x
    else
      set PATH $PATH $x
    end
  end
end

Update fish_user_paths only if it is defined
Update fish_user_paths only if it is defined

fish_user_paths variable is prepended to $PATH automatically. Some people set fish_user_paths, while others set PATH.
It will be better to test if fish_user_paths is set, and prepend it if it is, while just prepending to PATH otherwise.
asdf-vm/asdf,Stratus3D/asdf