We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Completion in ZSH doesn't understand that arguments follow certain options
* Pip version: 9.0.1
* Python version: 2.7.12
* Operating system: Ubuntu 16.04

### Description:

Completion in Zsh uses the older `compctl` builtin and returns completions for long options that take arguments with a trailing equals sign. But compctl/Zsh doesn't understand that as meaning that the option takes an argument and adds a space after the equals sign and also tries to complete the next argument if you remove the equals sign as yet another option.

No idea if this is fixable using the older compctl, might want to migrate to the newer compsys... With compsys you will probably have to modify the completion output from Pip or preprocess it in shell code so that it fits what something like `_arguments` expects.

https://github.com/pypa/pip/pull/4842 will make it complete file names by re-implementing that inside pip instead of letting the shell handle it which means certain stuff like colored file names won't work or `zstyle` related settings for file name completion. And it still won't fix the fact that Zsh will add a space after the equals sign...

### What I've run:

```sh
➜ pip install --requirem<tab>
➜ pip install --requirement= # With a space
➜ pip install --requirement=<tab> # Nothing
➜ pip install --requirement= <tab>
➜ pip install --requirement= -- # Sigh...
```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/pip/_internal/commands/completion.py`
Content:
```
1 import sys
2 import textwrap
3 from optparse import Values
4 from typing import List
5 
6 from pip._internal.cli.base_command import Command
7 from pip._internal.cli.status_codes import SUCCESS
8 from pip._internal.utils.misc import get_prog
9 
10 BASE_COMPLETION = """
11 # pip {shell} completion start{script}# pip {shell} completion end
12 """
13 
14 COMPLETION_SCRIPTS = {
15     "bash": """
16         _pip_completion()
17         {{
18             COMPREPLY=( $( COMP_WORDS="${{COMP_WORDS[*]}}" \\
19                            COMP_CWORD=$COMP_CWORD \\
20                            PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) )
21         }}
22         complete -o default -F _pip_completion {prog}
23     """,
24     "zsh": """
25         function _pip_completion {{
26           local words cword
27           read -Ac words
28           read -cn cword
29           reply=( $( COMP_WORDS="$words[*]" \\
30                      COMP_CWORD=$(( cword-1 )) \\
31                      PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ))
32         }}
33         compctl -K _pip_completion {prog}
34     """,
35     "fish": """
36         function __fish_complete_pip
37             set -lx COMP_WORDS (commandline -o) ""
38             set -lx COMP_CWORD ( \\
39                 math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\
40             )
41             set -lx PIP_AUTO_COMPLETE 1
42             string split \\  -- (eval $COMP_WORDS[1])
43         end
44         complete -fa "(__fish_complete_pip)" -c {prog}
45     """,
46     "powershell": """
47         if ((Test-Path Function:\\TabExpansion) -and -not `
48             (Test-Path Function:\\_pip_completeBackup)) {{
49             Rename-Item Function:\\TabExpansion _pip_completeBackup
50         }}
51         function TabExpansion($line, $lastWord) {{
52             $lastBlock = [regex]::Split($line, '[|;]')[-1].TrimStart()
53             if ($lastBlock.StartsWith("{prog} ")) {{
54                 $Env:COMP_WORDS=$lastBlock
55                 $Env:COMP_CWORD=$lastBlock.Split().Length - 1
56                 $Env:PIP_AUTO_COMPLETE=1
57                 (& {prog}).Split()
58                 Remove-Item Env:COMP_WORDS
59                 Remove-Item Env:COMP_CWORD
60                 Remove-Item Env:PIP_AUTO_COMPLETE
61             }}
62             elseif (Test-Path Function:\\_pip_completeBackup) {{
63                 # Fall back on existing tab expansion
64                 _pip_completeBackup $line $lastWord
65             }}
66         }}
67     """,
68 }
69 
70 
71 class CompletionCommand(Command):
72     """A helper command to be used for command completion."""
73 
74     ignore_require_venv = True
75 
76     def add_options(self) -> None:
77         self.cmd_opts.add_option(
78             "--bash",
79             "-b",
80             action="store_const",
81             const="bash",
82             dest="shell",
83             help="Emit completion code for bash",
84         )
85         self.cmd_opts.add_option(
86             "--zsh",
87             "-z",
88             action="store_const",
89             const="zsh",
90             dest="shell",
91             help="Emit completion code for zsh",
92         )
93         self.cmd_opts.add_option(
94             "--fish",
95             "-f",
96             action="store_const",
97             const="fish",
98             dest="shell",
99             help="Emit completion code for fish",
100         )
101         self.cmd_opts.add_option(
102             "--powershell",
103             "-p",
104             action="store_const",
105             const="powershell",
106             dest="shell",
107             help="Emit completion code for powershell",
108         )
109 
110         self.parser.insert_option_group(0, self.cmd_opts)
111 
112     def run(self, options: Values, args: List[str]) -> int:
113         """Prints the completion code of the given shell"""
114         shells = COMPLETION_SCRIPTS.keys()
115         shell_options = ["--" + shell for shell in sorted(shells)]
116         if options.shell in shells:
117             script = textwrap.dedent(
118                 COMPLETION_SCRIPTS.get(options.shell, "").format(prog=get_prog())
119             )
120             print(BASE_COMPLETION.format(script=script, shell=options.shell))
121             return SUCCESS
122         else:
123             sys.stderr.write(
124                 "ERROR: You must pass {}\n".format(" or ".join(shell_options))
125             )
126             return SUCCESS
127
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/src/pip/_internal/commands/completion.py b/src/pip/_internal/commands/completion.py
--- a/src/pip/_internal/commands/completion.py
+++ b/src/pip/_internal/commands/completion.py
@@ -22,15 +22,10 @@
         complete -o default -F _pip_completion {prog}
     """,
     "zsh": """
-        function _pip_completion {{
-          local words cword
-          read -Ac words
-          read -cn cword
-          reply=( $( COMP_WORDS="$words[*]" \\
-                     COMP_CWORD=$(( cword-1 )) \\
-                     PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ))
-        }}
-        compctl -K _pip_completion {prog}
+        #compdef -P pip[0-9.]#
+        compadd $( COMP_WORDS="$words[*]" \\
+                   COMP_CWORD=$((CURRENT-1)) \\
+                   PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null )
     """,
     "fish": """
         function __fish_complete_pip

{"golden_diff": "diff --git a/src/pip/_internal/commands/completion.py b/src/pip/_internal/commands/completion.py\n--- a/src/pip/_internal/commands/completion.py\n+++ b/src/pip/_internal/commands/completion.py\n@@ -22,15 +22,10 @@\n         complete -o default -F _pip_completion {prog}\n     \"\"\",\n     \"zsh\": \"\"\"\n-        function _pip_completion {{\n-          local words cword\n-          read -Ac words\n-          read -cn cword\n-          reply=( $( COMP_WORDS=\"$words[*]\" \\\\\n-                     COMP_CWORD=$(( cword-1 )) \\\\\n-                     PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ))\n-        }}\n-        compctl -K _pip_completion {prog}\n+        #compdef -P pip[0-9.]#\n+        compadd $( COMP_WORDS=\"$words[*]\" \\\\\n+                   COMP_CWORD=$((CURRENT-1)) \\\\\n+                   PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null )\n     \"\"\",\n     \"fish\": \"\"\"\n         function __fish_complete_pip\n", "issue": "Completion in ZSH doesn't understand that arguments follow certain options\n* Pip version: 9.0.1\r\n* Python version: 2.7.12\r\n* Operating system: Ubuntu 16.04\r\n\r\n### Description:\r\n\r\nCompletion in Zsh uses the older `compctl` builtin and returns completions for long options that take arguments with a trailing equals sign. But compctl/Zsh doesn't understand that as meaning that the option takes an argument and adds a space after the equals sign and also tries to complete the next argument if you remove the equals sign as yet another option.\r\n\r\nNo idea if this is fixable using the older compctl, might want to migrate to the newer compsys... With compsys you will probably have to modify the completion output from Pip or preprocess it in shell code so that it fits what something like `_arguments` expects.\r\n\r\nhttps://github.com/pypa/pip/pull/4842 will make it complete file names by re-implementing that inside pip instead of letting the shell handle it which means certain stuff like colored file names won't work or `zstyle` related settings for file name completion. And it still won't fix the fact that Zsh will add a space after the equals sign...\r\n\r\n### What I've run:\r\n\r\n```sh\r\n\u279c pip install --requirem<tab>\r\n\u279c pip install --requirement= # With a space\r\n\u279c pip install --requirement=<tab> # Nothing\r\n\u279c pip install --requirement= <tab>\r\n\u279c pip install --requirement= -- # Sigh...\r\n```\r\n\n", "before_files": [{"content": "import sys\nimport textwrap\nfrom optparse import Values\nfrom typing import List\n\nfrom pip._internal.cli.base_command import Command\nfrom pip._internal.cli.status_codes import SUCCESS\nfrom pip._internal.utils.misc import get_prog\n\nBASE_COMPLETION = \"\"\"\n# pip {shell} completion start{script}# pip {shell} completion end\n\"\"\"\n\nCOMPLETION_SCRIPTS = {\n    \"bash\": \"\"\"\n        _pip_completion()\n        {{\n            COMPREPLY=( $( COMP_WORDS=\"${{COMP_WORDS[*]}}\" \\\\\n                           COMP_CWORD=$COMP_CWORD \\\\\n                           PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) )\n        }}\n        complete -o default -F _pip_completion {prog}\n    \"\"\",\n    \"zsh\": \"\"\"\n        function _pip_completion {{\n          local words cword\n          read -Ac words\n          read -cn cword\n          reply=( $( COMP_WORDS=\"$words[*]\" \\\\\n                     COMP_CWORD=$(( cword-1 )) \\\\\n                     PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ))\n        }}\n        compctl -K _pip_completion {prog}\n    \"\"\",\n    \"fish\": \"\"\"\n        function __fish_complete_pip\n            set -lx COMP_WORDS (commandline -o) \"\"\n            set -lx COMP_CWORD ( \\\\\n                math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\\\\n            )\n            set -lx PIP_AUTO_COMPLETE 1\n            string split \\\\  -- (eval $COMP_WORDS[1])\n        end\n        complete -fa \"(__fish_complete_pip)\" -c {prog}\n    \"\"\",\n    \"powershell\": \"\"\"\n        if ((Test-Path Function:\\\\TabExpansion) -and -not `\n            (Test-Path Function:\\\\_pip_completeBackup)) {{\n            Rename-Item Function:\\\\TabExpansion _pip_completeBackup\n        }}\n        function TabExpansion($line, $lastWord) {{\n            $lastBlock = [regex]::Split($line, '[|;]')[-1].TrimStart()\n            if ($lastBlock.StartsWith(\"{prog} \")) {{\n                $Env:COMP_WORDS=$lastBlock\n                $Env:COMP_CWORD=$lastBlock.Split().Length - 1\n                $Env:PIP_AUTO_COMPLETE=1\n                (& {prog}).Split()\n                Remove-Item Env:COMP_WORDS\n                Remove-Item Env:COMP_CWORD\n                Remove-Item Env:PIP_AUTO_COMPLETE\n            }}\n            elseif (Test-Path Function:\\\\_pip_completeBackup) {{\n                # Fall back on existing tab expansion\n                _pip_completeBackup $line $lastWord\n            }}\n        }}\n    \"\"\",\n}\n\n\nclass CompletionCommand(Command):\n    \"\"\"A helper command to be used for command completion.\"\"\"\n\n    ignore_require_venv = True\n\n    def add_options(self) -> None:\n        self.cmd_opts.add_option(\n            \"--bash\",\n            \"-b\",\n            action=\"store_const\",\n            const=\"bash\",\n            dest=\"shell\",\n            help=\"Emit completion code for bash\",\n        )\n        self.cmd_opts.add_option(\n            \"--zsh\",\n            \"-z\",\n            action=\"store_const\",\n            const=\"zsh\",\n            dest=\"shell\",\n            help=\"Emit completion code for zsh\",\n        )\n        self.cmd_opts.add_option(\n            \"--fish\",\n            \"-f\",\n            action=\"store_const\",\n            const=\"fish\",\n            dest=\"shell\",\n            help=\"Emit completion code for fish\",\n        )\n        self.cmd_opts.add_option(\n            \"--powershell\",\n            \"-p\",\n            action=\"store_const\",\n            const=\"powershell\",\n            dest=\"shell\",\n            help=\"Emit completion code for powershell\",\n        )\n\n        self.parser.insert_option_group(0, self.cmd_opts)\n\n    def run(self, options: Values, args: List[str]) -> int:\n        \"\"\"Prints the completion code of the given shell\"\"\"\n        shells = COMPLETION_SCRIPTS.keys()\n        shell_options = [\"--\" + shell for shell in sorted(shells)]\n        if options.shell in shells:\n            script = textwrap.dedent(\n                COMPLETION_SCRIPTS.get(options.shell, \"\").format(prog=get_prog())\n            )\n            print(BASE_COMPLETION.format(script=script, shell=options.shell))\n            return SUCCESS\n        else:\n            sys.stderr.write(\n                \"ERROR: You must pass {}\\n\".format(\" or \".join(shell_options))\n            )\n            return SUCCESS\n", "path": "src/pip/_internal/commands/completion.py"}], "after_files": [{"content": "import sys\nimport textwrap\nfrom optparse import Values\nfrom typing import List\n\nfrom pip._internal.cli.base_command import Command\nfrom pip._internal.cli.status_codes import SUCCESS\nfrom pip._internal.utils.misc import get_prog\n\nBASE_COMPLETION = \"\"\"\n# pip {shell} completion start{script}# pip {shell} completion end\n\"\"\"\n\nCOMPLETION_SCRIPTS = {\n    \"bash\": \"\"\"\n        _pip_completion()\n        {{\n            COMPREPLY=( $( COMP_WORDS=\"${{COMP_WORDS[*]}}\" \\\\\n                           COMP_CWORD=$COMP_CWORD \\\\\n                           PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) )\n        }}\n        complete -o default -F _pip_completion {prog}\n    \"\"\",\n    \"zsh\": \"\"\"\n        #compdef -P pip[0-9.]#\n        compadd $( COMP_WORDS=\"$words[*]\" \\\\\n                   COMP_CWORD=$((CURRENT-1)) \\\\\n                   PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null )\n    \"\"\",\n    \"fish\": \"\"\"\n        function __fish_complete_pip\n            set -lx COMP_WORDS (commandline -o) \"\"\n            set -lx COMP_CWORD ( \\\\\n                math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\\\\n            )\n            set -lx PIP_AUTO_COMPLETE 1\n            string split \\\\  -- (eval $COMP_WORDS[1])\n        end\n        complete -fa \"(__fish_complete_pip)\" -c {prog}\n    \"\"\",\n    \"powershell\": \"\"\"\n        if ((Test-Path Function:\\\\TabExpansion) -and -not `\n            (Test-Path Function:\\\\_pip_completeBackup)) {{\n            Rename-Item Function:\\\\TabExpansion _pip_completeBackup\n        }}\n        function TabExpansion($line, $lastWord) {{\n            $lastBlock = [regex]::Split($line, '[|;]')[-1].TrimStart()\n            if ($lastBlock.StartsWith(\"{prog} \")) {{\n                $Env:COMP_WORDS=$lastBlock\n                $Env:COMP_CWORD=$lastBlock.Split().Length - 1\n                $Env:PIP_AUTO_COMPLETE=1\n                (& {prog}).Split()\n                Remove-Item Env:COMP_WORDS\n                Remove-Item Env:COMP_CWORD\n                Remove-Item Env:PIP_AUTO_COMPLETE\n            }}\n            elseif (Test-Path Function:\\\\_pip_completeBackup) {{\n                # Fall back on existing tab expansion\n                _pip_completeBackup $line $lastWord\n            }}\n        }}\n    \"\"\",\n}\n\n\nclass CompletionCommand(Command):\n    \"\"\"A helper command to be used for command completion.\"\"\"\n\n    ignore_require_venv = True\n\n    def add_options(self) -> None:\n        self.cmd_opts.add_option(\n            \"--bash\",\n            \"-b\",\n            action=\"store_const\",\n            const=\"bash\",\n            dest=\"shell\",\n            help=\"Emit completion code for bash\",\n        )\n        self.cmd_opts.add_option(\n            \"--zsh\",\n            \"-z\",\n            action=\"store_const\",\n            const=\"zsh\",\n            dest=\"shell\",\n            help=\"Emit completion code for zsh\",\n        )\n        self.cmd_opts.add_option(\n            \"--fish\",\n            \"-f\",\n            action=\"store_const\",\n            const=\"fish\",\n            dest=\"shell\",\n            help=\"Emit completion code for fish\",\n        )\n        self.cmd_opts.add_option(\n            \"--powershell\",\n            \"-p\",\n            action=\"store_const\",\n            const=\"powershell\",\n            dest=\"shell\",\n            help=\"Emit completion code for powershell\",\n        )\n\n        self.parser.insert_option_group(0, self.cmd_opts)\n\n    def run(self, options: Values, args: List[str]) -> int:\n        \"\"\"Prints the completion code of the given shell\"\"\"\n        shells = COMPLETION_SCRIPTS.keys()\n        shell_options = [\"--\" + shell for shell in sorted(shells)]\n        if options.shell in shells:\n            script = textwrap.dedent(\n                COMPLETION_SCRIPTS.get(options.shell, \"\").format(prog=get_prog())\n            )\n            print(BASE_COMPLETION.format(script=script, shell=options.shell))\n            return SUCCESS\n        else:\n            sys.stderr.write(\n                \"ERROR: You must pass {}\\n\".format(\" or \".join(shell_options))\n            )\n            return SUCCESS\n", "path": "src/pip/_internal/commands/completion.py"}]}