diff --git a/docs/reference.md b/docs/reference.md
index ec19bfd..33ee391 100644
--- a/docs/reference.md
+++ b/docs/reference.md
@@ -58,7 +58,6 @@
     *   [rebase_path: Rebase a file or directory to another location.](#func_rebase_path)
     *   [set_default_toolchain: Sets the default toolchain name.](#func_set_default_toolchain)
     *   [set_defaults: Set default values for a target type.](#func_set_defaults)
-    *   [set_sources_assignment_filter: Deprecated feature.](#func_set_sources_assignment_filter)
     *   [split_list: Splits a list into N different sub-lists.](#func_split_list)
     *   [string_join: Concatenates a list of strings with a separator.](#func_string_join)
     *   [string_replace: Replaces substring in the given string.](#func_string_replace)
@@ -3099,12 +3098,6 @@
     configs -= [ "//tools/mything:settings" ]
   }
 ```
-### <a name="func_set_sources_assignment_filter"></a>**set_sources_assignment_filter**: Deprecated feature.
-
-```
-  This feature is deprecated. It will be removed once all usages have been
-  removed. Only supports a single argument that needs to be an empty list.
-```
 ### <a name="func_split_list"></a>**split_list**: Splits a list into N different sub-lists.
 
 ```
diff --git a/src/gn/functions.cc b/src/gn/functions.cc
index e627e2a..6acf41a 100644
--- a/src/gn/functions.cc
+++ b/src/gn/functions.cc
@@ -806,40 +806,6 @@
   return Value();
 }
 
-// set_sources_assignment_filter -----------------------------------------------
-
-const char kSetSourcesAssignmentFilter[] = "set_sources_assignment_filter";
-const char kSetSourcesAssignmentFilter_HelpShort[] =
-    "set_sources_assignment_filter: Deprecated feature.";
-const char kSetSourcesAssignmentFilter_Help[] =
-    R"(set_sources_assignment_filter: Deprecated feature.
-
-  This feature is deprecated. It will be removed once all usages have been
-  removed. Only supports a single argument that needs to be an empty list.
-)";
-
-Value RunSetSourcesAssignmentFilter(Scope* scope,
-                                    const FunctionCallNode* function,
-                                    const std::vector<Value>& args,
-                                    Err* err) {
-  if (args.size() != 1) {
-    *err = Err(function, "set_sources_assignment_filter takes one argument.");
-    return Value();
-  }
-
-  if (!args[0].VerifyTypeIs(Value::LIST, err)) {
-    return Value();
-  }
-
-  if (!args[0].list_value().empty()) {
-    *err = Err(function,
-               "set_sources_assignment_filter argument must be an empty list.");
-    return Value();
-  }
-
-  return Value();
-}
-
 // pool ------------------------------------------------------------------------
 
 const char kPool[] = "pool";
@@ -1431,7 +1397,6 @@
     INSERT_FUNCTION(RebasePath, false)
     INSERT_FUNCTION(SetDefaults, false)
     INSERT_FUNCTION(SetDefaultToolchain, false)
-    INSERT_FUNCTION(SetSourcesAssignmentFilter, false)
     INSERT_FUNCTION(SplitList, false)
     INSERT_FUNCTION(StringJoin, false)
     INSERT_FUNCTION(StringReplace, false)
diff --git a/src/gn/functions.h b/src/gn/functions.h
index dbcce39..e0af413 100644
--- a/src/gn/functions.h
+++ b/src/gn/functions.h
@@ -328,14 +328,6 @@
                              const std::vector<Value>& args,
                              Err* err);
 
-extern const char kSetSourcesAssignmentFilter[];
-extern const char kSetSourcesAssignmentFilter_HelpShort[];
-extern const char kSetSourcesAssignmentFilter_Help[];
-Value RunSetSourcesAssignmentFilter(Scope* scope,
-                                    const FunctionCallNode* function,
-                                    const std::vector<Value>& args,
-                                    Err* err);
-
 extern const char kSharedLibrary[];
 extern const char kSharedLibrary_HelpShort[];
 extern const char kSharedLibrary_Help[];
