diff --git a/src/evalfunc.c b/src/evalfunc.c
index fa63ab2..0b2ba00 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -168,6 +168,7 @@
 static void f_srand(typval_T *argvars, typval_T *rettv);
 static void f_submatch(typval_T *argvars, typval_T *rettv);
 static void f_substitute(typval_T *argvars, typval_T *rettv);
+static void f_swapfilelist(typval_T *argvars, typval_T *rettv);
 static void f_swapinfo(typval_T *argvars, typval_T *rettv);
 static void f_swapname(typval_T *argvars, typval_T *rettv);
 static void f_synID(typval_T *argvars, typval_T *rettv);
@@ -2579,6 +2580,8 @@
 			ret_string,	    f_submatch},
     {"substitute",	4, 4, FEARG_1,	    arg4_string_string_any_string,
 			ret_string,	    f_substitute},
+    {"swapfilelist",	0, 0, 0,	    NULL,
+			ret_list_string,    f_swapfilelist},
     {"swapinfo",	1, 1, FEARG_1,	    arg1_string,
 			ret_dict_any,	    f_swapinfo},
     {"swapname",	1, 1, FEARG_1,	    arg1_buffer,
@@ -10171,6 +10174,17 @@
 }
 
 /*
+ * "swapfilelist()" function
+ */
+    static void
+f_swapfilelist(typval_T *argvars UNUSED, typval_T *rettv)
+{
+    if (rettv_list_alloc(rettv) == FAIL)
+	return;
+    recover_names(NULL, FALSE, rettv->vval.v_list, 0, NULL);
+}
+
+/*
  * "swapinfo(swap_filename)" function
  */
     static void
diff --git a/src/main.c b/src/main.c
index 477f3d6..41a509d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -507,7 +507,7 @@
      */
     if (recoverymode && params.fname == NULL)
     {
-	recover_names(NULL, TRUE, 0, NULL);
+	recover_names(NULL, TRUE, NULL, 0, NULL);
 	mch_exit(0);
     }
 
diff --git a/src/memline.c b/src/memline.c
index 42cbad2..16885d3 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -1208,7 +1208,7 @@
 	directly = FALSE;
 
 	// count the number of matching swap files
-	len = recover_names(fname, FALSE, 0, NULL);
+	len = recover_names(fname, FALSE, NULL, 0, NULL);
 	if (len == 0)		    // no swap files found
 	{
 	    semsg(_(e_no_swap_file_found_for_str), fname);
@@ -1219,7 +1219,7 @@
 	else			    // several swap files found, choose
 	{
 	    // list the names of the swap files
-	    (void)recover_names(fname, TRUE, 0, NULL);
+	    (void)recover_names(fname, TRUE, NULL, 0, NULL);
 	    msg_putchar('\n');
 	    msg_puts(_("Enter number of swap file to use (0 to quit): "));
 	    i = get_number(FALSE, NULL);
@@ -1227,7 +1227,7 @@
 		goto theend;
 	}
 	// get the swap file name that will be used
-	(void)recover_names(fname, FALSE, i, &fname_used);
+	(void)recover_names(fname, FALSE, NULL, i, &fname_used);
     }
     if (fname_used == NULL)
 	goto theend;			// out of memory
@@ -1801,12 +1801,14 @@
  * - list the swap files for "vim -r"
  * - count the number of swap files when recovering
  * - list the swap files when recovering
+ * - list the swap files for swapfilelist()
  * - find the name of the n'th swap file when recovering
  */
     int
 recover_names(
     char_u	*fname,		// base for swap file name
-    int		list,		// when TRUE, list the swap file names
+    int		do_list,	// when TRUE, list the swap file names
+    list_T	*ret_list UNUSED, // when not NULL add file names to it
     int		nr,		// when non-zero, return nr'th swap file name
     char_u	**fname_out)	// result when "nr" > 0
 {
@@ -1817,7 +1819,6 @@
     int		num_files;
     int		file_count = 0;
     char_u	**files;
-    int		i;
     char_u	*dirp;
     char_u	*dir_name;
     char_u	*fname_res = NULL;
@@ -1837,7 +1838,7 @@
 	    fname_res = fname;
     }
 
-    if (list)
+    if (do_list)
     {
 	// use msg() to start the scrolling properly
 	msg(_("Swap files found:"));
@@ -1938,7 +1939,7 @@
 	}
 
 	// check for out-of-memory
-	for (i = 0; i < num_names; ++i)
+	for (int i = 0; i < num_names; ++i)
 	{
 	    if (names[i] == NULL)
 	    {
@@ -1987,12 +1988,14 @@
 	}
 
 	/*
-	 * remove swapfile name of the current buffer, it must be ignored
+	 * Remove swapfile name of the current buffer, it must be ignored.
+	 * But keep it for swapfilelist().
 	 */
 	if (curbuf->b_ml.ml_mfp != NULL
-			       && (p = curbuf->b_ml.ml_mfp->mf_fname) != NULL)
+			       && (p = curbuf->b_ml.ml_mfp->mf_fname) != NULL
+			       && ret_list == NULL)
 	{
-	    for (i = 0; i < num_files; ++i)
+	    for (int i = 0; i < num_files; ++i)
 		// Do not expand wildcards, on windows would try to expand
 		// "%tmp%" in "%tmp%file".
 		if (fullpathcmp(p, files[i], TRUE, FALSE) & FPC_SAME)
@@ -2018,7 +2021,7 @@
 		dirp = (char_u *)"";		    // stop searching
 	    }
 	}
-	else if (list)
+	else if (do_list)
 	{
 	    if (dir_name[0] == '.' && dir_name[1] == NUL)
 	    {
@@ -2036,7 +2039,7 @@
 
 	    if (num_files)
 	    {
-		for (i = 0; i < num_files; ++i)
+		for (int i = 0; i < num_files; ++i)
 		{
 		    // print the swap file name
 		    msg_outnum((long)++file_count);
@@ -2050,10 +2053,24 @@
 		msg_puts(_("      -- none --\n"));
 	    out_flush();
 	}
+#ifdef FEAT_EVAL
+	else if (ret_list != NULL)
+	{
+	    for (int i = 0; i < num_files; ++i)
+	    {
+		char_u *name = concat_fnames(dir_name, files[i], TRUE);
+		if (name != NULL)
+		{
+		    list_append_string(ret_list, name, -1);
+		    vim_free(name);
+		}
+	    }
+	}
+#endif
 	else
 	    file_count += num_files;
 
-	for (i = 0; i < num_names; ++i)
+	for (int i = 0; i < num_names; ++i)
 	    vim_free(names[i]);
 	if (num_files > 0)
 	    FreeWild(num_files, files);
diff --git a/src/proto/memline.pro b/src/proto/memline.pro
index 364f0aa..3fa8707 100644
--- a/src/proto/memline.pro
+++ b/src/proto/memline.pro
@@ -10,7 +10,7 @@
 void ml_close_notmod(void);
 void ml_timestamp(buf_T *buf);
 void ml_recover(int checkext);
-int recover_names(char_u *fname, int list, int nr, char_u **fname_out);
+int recover_names(char_u *fname, int do_list, list_T *ret_list, int nr, char_u **fname_out);
 char_u *make_percent_swname(char_u *dir, char_u *name);
 void get_b0_dict(char_u *fname, dict_T *d);
 void ml_sync_all(int check_file, int check_char);
diff --git a/src/testdir/runtest.vim b/src/testdir/runtest.vim
index e1d9999..2eabb1a 100644
--- a/src/testdir/runtest.vim
+++ b/src/testdir/runtest.vim
@@ -160,6 +160,14 @@
   let $BASH_SILENCE_DEPRECATION_WARNING = 1
 endif
 
+
+" A previous (failed) test run may have left swap files behind.  Delete them
+" before running tests again, they might interfere.
+for name in s:GetSwapFileList()
+  call delete(name)
+endfor
+
+
 " Prepare for calling test_garbagecollect_now().
 let v:testing = 1
 
@@ -186,6 +194,22 @@
   let g:func_start = reltime()
 endif
 
+" Get the list of swap files in the current directory.
+func s:GetSwapFileList()
+  let save_dir = &directory
+  let &directory = '.'
+  let files = swapfilelist()
+  let &directory = save_dir
+
+  " remove a match with runtest.vim
+  let idx = indexof(files, 'v:val =~ "runtest.vim."')
+  if idx >= 0
+    call remove(files, idx)
+  endif
+
+  return files
+endfunc
+
 " Invoked when a test takes too much time.
 func TestTimeout(id)
   split test.log
@@ -339,6 +363,16 @@
   endif
   call add(s:messages, message)
   let s:done += 1
+
+  " Check if the test has left any swap files behind.  Delete them before
+  " running tests again, they might interfere.
+  let swapfiles = s:GetSwapFileList()
+  if len(swapfiles) > 0
+    call add(s:messages, "Found swap files: " .. string(swapfiles))
+    for name in swapfiles
+      call delete(name)
+    endfor
+  endif
 endfunc
 
 func AfterTheTest(func_name)
diff --git a/src/testdir/test_suspend.vim b/src/testdir/test_suspend.vim
index c96a1a6..7538c80 100644
--- a/src/testdir/test_suspend.vim
+++ b/src/testdir/test_suspend.vim
@@ -28,9 +28,6 @@
     sleep 150m
   endif
 
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   let buf = term_start('/bin/sh')
   " Wait for shell prompt.
   call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))})
@@ -69,7 +66,6 @@
 
   exe buf . 'bwipe!'
   call delete('Xfoo')
-  call delete('.Xfoo.swp')
 endfunc
 
 func Test_suspend_autocmd()
@@ -82,9 +78,6 @@
     sleep 150m
   endif
 
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   let buf = term_start('/bin/sh', #{term_rows: 6})
   " Wait for shell prompt.
   call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))})
@@ -123,7 +116,6 @@
 
   exe buf . 'bwipe!'
   call delete('Xfoo')
-  call delete('.Xfoo.swp')
 endfunc
 
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_swap.vim b/src/testdir/test_swap.vim
index 5237edc..c776ca5 100644
--- a/src/testdir/test_swap.vim
+++ b/src/testdir/test_swap.vim
@@ -110,6 +110,15 @@
   w
   let fname = s:swapname()
   call assert_match('Xswapinfo', fname)
+
+  let nr = 0
+  for name in swapfilelist()
+    if name =~ '[\\/]' .. fname .. '$'
+      let nr += 1
+    endif
+  endfor
+  call assert_equal(1, nr)
+
   let info = fname->swapinfo()
 
   let ver = printf('VIM %d.%d', v:version / 100, v:version % 100)
diff --git a/src/testdir/test_tagjump.vim b/src/testdir/test_tagjump.vim
index 2c720a5..5185b20 100644
--- a/src/testdir/test_tagjump.vim
+++ b/src/testdir/test_tagjump.vim
@@ -733,9 +733,6 @@
 
 " Tests for guessing the tag location
 func Test_tag_guess()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//",
         \ "func1\tXfoo\t/^int func1(int x)/",
         \ "func2\tXfoo\t/^int func2(int y)/",
@@ -772,9 +769,6 @@
 
 " Test for an unsorted tags file
 func Test_tag_sort()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   let l = [
         \ "first\tXfoo\t1",
         \ "ten\tXfoo\t3",
@@ -802,9 +796,6 @@
 
 " Test for an unsorted tags file
 func Test_tag_fold()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   call writefile([
         \ "!_TAG_FILE_ENCODING\tutf-8\t//",
         \ "!_TAG_FILE_SORTED\t2\t/0=unsorted, 1=sorted, 2=foldcase/",
@@ -831,9 +822,6 @@
 
 " Test for the :ltag command
 func Test_ltag()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   call writefile([
         \ "!_TAG_FILE_ENCODING\tutf-8\t//",
         \ "first\tXfoo\t1",
@@ -871,9 +859,6 @@
 " Test for setting the last search pattern to the tag search pattern
 " when cpoptions has 't'
 func Test_tag_last_search_pat()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   call writefile([
         \ "!_TAG_FILE_ENCODING\tutf-8\t//",
         \ "first\tXfoo\t/^int first() {}/",
@@ -902,9 +887,6 @@
 
 " Tag stack tests
 func Test_tag_stack()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   let l = []
   for i in range(10, 31)
     let l += ["var" .. i .. "\tXfoo\t/^int var" .. i .. ";$/"]
@@ -967,9 +949,6 @@
 
 " Test for browsing multiple matching tags
 func Test_tag_multimatch()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   call writefile([
         \ "!_TAG_FILE_ENCODING\tutf-8\t//",
         \ "first\tXfoo\t1",
@@ -1015,9 +994,6 @@
 
 " Test for previewing multiple matching tags
 func Test_preview_tag_multimatch()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   call writefile([
         \ "!_TAG_FILE_ENCODING\tutf-8\t//",
         \ "first\tXfoo\t1",
@@ -1066,9 +1042,6 @@
 
 " Test for jumping to multiple matching tags across multiple :tags commands
 func Test_tnext_multimatch()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   call writefile([
         \ "!_TAG_FILE_ENCODING\tutf-8\t//",
         \ "first\tXfoo1\t1",
@@ -1096,9 +1069,6 @@
 
 " Test for jumping to multiple matching tags in non-existing files
 func Test_multimatch_non_existing_files()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   call writefile([
         \ "!_TAG_FILE_ENCODING\tutf-8\t//",
         \ "first\tXfoo1\t1",
@@ -1116,9 +1086,6 @@
 endfunc
 
 func Test_tselect_listing()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   call writefile([
         \ "!_TAG_FILE_ENCODING\tutf-8\t//",
         \ "first\tXfoo\t1" .. ';"' .. "\tv\ttyperef:typename:int\tfile:",
@@ -1500,9 +1467,6 @@
 
 " Test for 'tagbsearch' (binary search)
 func Test_tagbsearch()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   " If a tags file header says the tags are sorted, but the tags are actually
   " unsorted, then binary search should fail and linear search should work.
   call writefile([
diff --git a/src/testdir/test_tcl.vim b/src/testdir/test_tcl.vim
index 03cae09..4c6537f 100644
--- a/src/testdir/test_tcl.vim
+++ b/src/testdir/test_tcl.vim
@@ -638,9 +638,6 @@
 
 " Test $buf delcmd {cmd} (command executed when buffer is deleted)
 func Test_buffer_delcmd()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   new Xfoo
   split
   tcl $::vim::current(buffer) delcmd [list set msg "buffer deleted"]
diff --git a/src/testdir/test_termcodes.vim b/src/testdir/test_termcodes.vim
index 2cb20e0..dd5280f 100644
--- a/src/testdir/test_termcodes.vim
+++ b/src/testdir/test_termcodes.vim
@@ -665,9 +665,6 @@
   set mouse=a term=xterm
   call WaitForResponses()
 
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   let row = 1
 
   for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index 9a042c3..0a4ae49 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -137,9 +137,6 @@
 
 " Test the ":wincmd ^" and "<C-W>^" commands.
 func Test_window_split_edit_alternate()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   " Test for failure when the alternate buffer/file no longer exists.
   edit Xfoo | %bw
   call assert_fails(':wincmd ^', 'E23:')
@@ -172,9 +169,6 @@
 
 " Test the ":[count]wincmd ^" and "[count]<C-W>^" commands.
 func Test_window_split_edit_bufnr()
-  " in case a previous failure left a swap file behind
-  call delete('.Xfoo.swp')
-
   %bwipeout
   let l:nr = bufnr('%') + 1
   call assert_fails(':execute "normal! ' . l:nr . '\<C-W>\<C-^>"', 'E92:')
diff --git a/src/version.c b/src/version.c
index 9f400f2..4a15f43 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1007,
+/**/
     1006,
 /**/
     1005,
